Bug 1245649: Turn on no-trailing-spaces. r=Gijs
authorDave Townsend <dtownsend@oxymoronical.com>
Wed, 03 Feb 2016 14:22:33 -0800
changeset 329076 6c56f5dad3b24506c41d5a38115d19456fe2a802
parent 329075 345ff6c8b0a24a357c9f0b4d8d4f9c6e5c71eb16
child 329077 06982056b5a5cb566eb836d53283b545a927de29
push id10463
push userdtownsend@mozilla.com
push dateFri, 05 Feb 2016 03:02:33 +0000
reviewersGijs
bugs1245649
milestone47.0a1
Bug 1245649: Turn on no-trailing-spaces. r=Gijs
browser/base/content/browser-places.js
browser/base/content/content.js
browser/base/content/pageinfo/security.js
browser/base/content/sync/genericChange.js
browser/base/content/urlbarBindings.xml
browser/base/content/utilityOverlay.js
browser/base/content/web-panels.js
browser/branding/aurora/pref/firefox-branding.js
browser/branding/nightly/pref/firefox-branding.js
browser/branding/official/pref/firefox-branding.js
browser/branding/unofficial/pref/firefox-branding.js
browser/components/customizableui/test/browser_945739_showInPrivateBrowsing_customize_mode.js
browser/components/customizableui/test/head.js
browser/components/nsBrowserContentHandler.js
browser/components/places/content/browserPlacesViews.js
browser/components/places/content/controller.js
browser/components/places/content/history-panel.js
browser/components/places/content/places.js
browser/components/places/content/treeView.js
browser/components/places/tests/browser/browser_475045.js
browser/components/places/tests/browser/browser_views_liveupdate.js
browser/components/places/tests/unit/test_PUIU_makeTransaction.js
browser/components/safebrowsing/content/test/browser_bug400731.js
browser/components/safebrowsing/content/test/browser_bug415846.js
browser/components/search/test/browser_bing_behavior.js
browser/extensions/pocket/content/panels/js/saved.js
browser/extensions/pocket/content/panels/js/signup.js
browser/extensions/pocket/content/pktApi.jsm
browser/modules/FormSubmitObserver.jsm
browser/modules/WindowsJumpLists.jsm
browser/modules/WindowsPreviewPerTab.jsm
browser/modules/offlineAppCache.jsm
storage/test/unit/test_storage_statement.js
toolkit/.eslintrc
toolkit/components/alerts/test/test_alerts.html
toolkit/components/apppicker/content/appPicker.js
toolkit/components/autocomplete/tests/unit/head_autocomplete.js
toolkit/components/autocomplete/tests/unit/test_378079.js
toolkit/components/autocomplete/tests/unit/test_393191.js
toolkit/components/autocomplete/tests/unit/test_autocomplete_multiple.js
toolkit/components/autocomplete/tests/unit/test_badDefaultIndex.js
toolkit/components/autocomplete/tests/unit/test_completeDefaultIndex_casing.js
toolkit/components/autocomplete/tests/unit/test_finalCompleteValue.js
toolkit/components/autocomplete/tests/unit/test_finalCompleteValue_forceComplete.js
toolkit/components/autocomplete/tests/unit/test_finalDefaultCompleteValue.js
toolkit/components/autocomplete/tests/unit/test_hiddenResult.js
toolkit/components/autocomplete/tests/unit/test_immediate_search.js
toolkit/components/autocomplete/tests/unit/test_previousResult.js
toolkit/components/autocomplete/tests/unit/test_stopSearch.js
toolkit/components/commandlines/test/unit/test_bug666224.js
toolkit/components/console/content/console.js
toolkit/components/console/content/consoleBindings.xml
toolkit/components/contentprefs/tests/unit/head_contentPrefs.js
toolkit/components/contentprefs/tests/unit/test_bug503971.js
toolkit/components/contentprefs/tests/unit/test_bug679784.js
toolkit/components/contentprefs/tests/unit/test_unusedGroupsAndSettings.js
toolkit/components/cookie/content/cookieAcceptDialog.js
toolkit/components/crashes/CrashManager.jsm
toolkit/components/downloads/nsDownloadManagerUI.js
toolkit/components/downloads/test/browser/browser_bug414214.js
toolkit/components/downloads/test/browser/browser_nsIDownloadManagerUI.js
toolkit/components/downloads/test/unit/test_download_samename.js
toolkit/components/downloads/test/unit/test_history_expiration.js
toolkit/components/feeds/FeedProcessor.js
toolkit/components/feeds/test/test_xml.js
toolkit/components/filepicker/content/filepicker.js
toolkit/components/gfx/SanityTest.js
toolkit/components/microformats/Microformats.js
toolkit/components/microformats/microformat-shiv.js
toolkit/components/microformats/test/interface-tests/count-test.js
toolkit/components/microformats/test/interface-tests/experimental-test.js
toolkit/components/microformats/test/interface-tests/getParent-test.js
toolkit/components/microformats/test/interface-tests/hasMicroformats-test.js
toolkit/components/microformats/test/interface-tests/isMicroformat-test.js
toolkit/components/microformats/test/lib/dates.js
toolkit/components/microformats/test/lib/html.js
toolkit/components/microformats/test/lib/isodate.js
toolkit/components/microformats/test/lib/maps/h-adr.js
toolkit/components/microformats/test/lib/maps/h-card.js
toolkit/components/microformats/test/lib/maps/h-entry.js
toolkit/components/microformats/test/lib/maps/h-event.js
toolkit/components/microformats/test/lib/maps/h-feed.js
toolkit/components/microformats/test/lib/maps/h-geo.js
toolkit/components/microformats/test/lib/maps/h-item.js
toolkit/components/microformats/test/lib/maps/h-listing.js
toolkit/components/microformats/test/lib/maps/h-news.js
toolkit/components/microformats/test/lib/maps/h-org.js
toolkit/components/microformats/test/lib/maps/h-product.js
toolkit/components/microformats/test/lib/maps/h-recipe.js
toolkit/components/microformats/test/lib/maps/h-resume.js
toolkit/components/microformats/test/lib/maps/h-review-aggregate.js
toolkit/components/microformats/test/lib/maps/h-review.js
toolkit/components/microformats/test/lib/maps/rel.js
toolkit/components/microformats/test/lib/parser-implied.js
toolkit/components/microformats/test/lib/parser-includes.js
toolkit/components/microformats/test/lib/parser-rels.js
toolkit/components/microformats/test/lib/text.js
toolkit/components/microformats/test/lib/utilities.js
toolkit/components/microformats/test/module-tests/dates-test.js
toolkit/components/microformats/test/module-tests/domutils-test.js
toolkit/components/microformats/test/module-tests/html-test.js
toolkit/components/microformats/test/module-tests/isodate-test.js
toolkit/components/microformats/test/module-tests/text-test.js
toolkit/components/microformats/test/module-tests/url-test.js
toolkit/components/microformats/test/module-tests/utilities-test.js
toolkit/components/microformats/test/standards-tests/mf-mixed-h-card-mixedpropertries.js
toolkit/components/microformats/test/standards-tests/mf-mixed-h-card-tworoots.js
toolkit/components/microformats/test/standards-tests/mf-mixed-h-entry-mixedroots.js
toolkit/components/microformats/test/standards-tests/mf-mixed-h-resume-mixedroots.js
toolkit/components/microformats/test/standards-tests/mf-v1-adr-simpleproperties.js
toolkit/components/microformats/test/standards-tests/mf-v1-geo-abbrpattern.js
toolkit/components/microformats/test/standards-tests/mf-v1-geo-hidden.js
toolkit/components/microformats/test/standards-tests/mf-v1-geo-simpleproperties.js
toolkit/components/microformats/test/standards-tests/mf-v1-geo-valuetitleclass.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-ampm.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-attendees.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-combining.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-concatenate.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-time.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcard-email.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcard-format.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcard-hyperlinkedphoto.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcard-justahyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcard-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcard-multiple.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcard-name.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcard-single.js
toolkit/components/microformats/test/standards-tests/mf-v1-hentry-summarycontent.js
toolkit/components/microformats/test/standards-tests/mf-v1-hfeed-simple.js
toolkit/components/microformats/test/standards-tests/mf-v1-hnews-all.js
toolkit/components/microformats/test/standards-tests/mf-v1-hnews-minimum.js
toolkit/components/microformats/test/standards-tests/mf-v1-hproduct-aggregate.js
toolkit/components/microformats/test/standards-tests/mf-v1-hproduct-simpleproperties.js
toolkit/components/microformats/test/standards-tests/mf-v1-hresume-affiliation.js
toolkit/components/microformats/test/standards-tests/mf-v1-hresume-contact.js
toolkit/components/microformats/test/standards-tests/mf-v1-hresume-education.js
toolkit/components/microformats/test/standards-tests/mf-v1-hresume-skill.js
toolkit/components/microformats/test/standards-tests/mf-v1-hresume-work.js
toolkit/components/microformats/test/standards-tests/mf-v1-hreview-aggregate-hcard.js
toolkit/components/microformats/test/standards-tests/mf-v1-hreview-aggregate-justahyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v1-hreview-aggregate-vevent.js
toolkit/components/microformats/test/standards-tests/mf-v1-hreview-item.js
toolkit/components/microformats/test/standards-tests/mf-v1-hreview-vcard.js
toolkit/components/microformats/test/standards-tests/mf-v1-includes-hcarditemref.js
toolkit/components/microformats/test/standards-tests/mf-v1-includes-heventitemref.js
toolkit/components/microformats/test/standards-tests/mf-v1-includes-hyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v1-includes-object.js
toolkit/components/microformats/test/standards-tests/mf-v1-includes-table.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-adr-geo.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-adr-geourl.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-adr-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-adr-simpleproperties.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-as-note-note.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-baseurl.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-childimplied.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-extendeddescription.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-hcard.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-horghcard.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-hyperlinkedphoto.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-impliedname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-impliedphoto.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-impliedurl.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-justahyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-nested.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-p-property.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-relativeurls.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-impliedvalue-nested.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-justahyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-summarycontent.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-u-property.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-urlincontent.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-ampm.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-attendees.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-combining.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-concatenate.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-dates.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-dt-property.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-justahyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-time.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-feed-implied-title.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-feed-simple.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-abbrpattern.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-altitude.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-hidden.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-simpleproperties.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-valuetitleclass.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-news-all.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-news-minimum.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-org-hyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-org-simple.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-org-simpleproperties.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-product-aggregate.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-product-justahyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-product-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-product-simpleproperties.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-recipe-all.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-recipe-minimum.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-affiliation.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-contact.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-education.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-skill.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-work.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-aggregate-hevent.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-aggregate-justahyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-aggregate-simpleproperties.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-hyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-implieditem.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-item.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-photo.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-vcard.js
toolkit/components/microformats/test/standards-tests/mf-v2-rel-duplicate-rels.js
toolkit/components/microformats/test/standards-tests/mf-v2-rel-license.js
toolkit/components/microformats/test/standards-tests/mf-v2-rel-nofollow.js
toolkit/components/microformats/test/standards-tests/mf-v2-rel-rel-urls.js
toolkit/components/microformats/test/standards-tests/mf-v2-rel-varying-text-duplicate-rels.js
toolkit/components/microformats/test/standards-tests/mf-v2-rel-xfn-all.js
toolkit/components/microformats/test/standards-tests/mf-v2-rel-xfn-elsewhere.js
toolkit/components/microformats/test/static/javascript/DOMParser.js
toolkit/components/microformats/test/static/javascript/beautify.js
toolkit/components/microformats/test/static/javascript/chai.js
toolkit/components/microformats/test/static/javascript/count.js
toolkit/components/microformats/test/static/javascript/parse.js
toolkit/components/microformats/test/static/javascript/prettify.js
toolkit/components/microformats/test/static/javascript/testrunner.js
toolkit/components/microformats/tests/test_Microformats_geo.html
toolkit/components/microformats/tests/test_Microformats_getters.html
toolkit/components/microformats/tests/test_Microformats_hCard.html
toolkit/components/nsDefaultCLH.js
toolkit/components/perfmonitoring/PerformanceStats.jsm
toolkit/components/perfmonitoring/tests/browser/browser_compartments.js
toolkit/components/perfmonitoring/tests/browser/browser_webpagePerformanceAlerts.js
toolkit/components/places/BookmarkHTMLUtils.jsm
toolkit/components/places/Bookmarks.jsm
toolkit/components/places/PlacesBackups.jsm
toolkit/components/places/PlacesUtils.jsm
toolkit/components/places/nsTaggingService.js
toolkit/components/places/tests/autocomplete/test_match_beginning.js
toolkit/components/places/tests/bookmarks/test_384228.js
toolkit/components/places/tests/bookmarks/test_385829.js
toolkit/components/places/tests/bookmarks/test_388695.js
toolkit/components/places/tests/bookmarks/test_395101.js
toolkit/components/places/tests/bookmarks/test_405938_restore_queries.js
toolkit/components/places/tests/bookmarks/test_417228-exclude-from-backup.js
toolkit/components/places/tests/bookmarks/test_424958-json-quoted-folders.js
toolkit/components/places/tests/bookmarks/test_448584.js
toolkit/components/places/tests/bookmarks/test_818584-discard-duplicate-backups.js
toolkit/components/places/tests/bookmarks/test_997030-bookmarks-html-encode.js
toolkit/components/places/tests/bookmarks/test_bmindex.js
toolkit/components/places/tests/bookmarks/test_bookmarks_fetch.js
toolkit/components/places/tests/browser/browser_bug680727.js
toolkit/components/places/tests/history/test_remove.js
toolkit/components/places/tests/queries/test_415716.js
toolkit/components/places/tests/queries/test_onlyBookmarked.js
toolkit/components/places/tests/queries/test_transitions.js
toolkit/components/places/tests/unit/test_331487.js
toolkit/components/places/tests/unit/test_384370.js
toolkit/components/places/tests/unit/test_385397.js
toolkit/components/places/tests/unit/test_408221.js
toolkit/components/places/tests/unit/test_413784.js
toolkit/components/places/tests/unit/test_419792_node_tags_property.js
toolkit/components/places/tests/unit/test_429505_remove_shortcuts.js
toolkit/components/places/tests/unit/test_PlacesUtils_lazyobservers.js
toolkit/components/places/tests/unit/test_adaptive_bug527311.js
toolkit/components/places/tests/unit/test_async_history_api.js
toolkit/components/places/tests/unit/test_bookmark_catobs.js
toolkit/components/places/tests/unit/test_bookmarks_html_import_tags.js
toolkit/components/places/tests/unit/test_frecency.js
toolkit/components/places/tests/unit/test_history.js
toolkit/components/places/tests/unit/test_history_autocomplete_tags.js
toolkit/components/places/tests/unit/test_history_sidebar.js
toolkit/components/places/tests/unit/test_isvisited.js
toolkit/components/places/tests/unit/test_keywords.js
toolkit/components/places/tests/unit/test_placeURIs.js
toolkit/components/places/tests/unit/test_removeVisitsByTimeframe.js
toolkit/components/places/tests/unit/test_tag_autocomplete_search.js
toolkit/components/places/tests/unit/test_utils_getURLsForContainerNode.js
toolkit/components/printing/content/printPageSetup.js
toolkit/components/printing/content/printPreviewProgress.js
toolkit/components/printing/content/printProgress.js
toolkit/components/printing/content/printUtils.js
toolkit/components/printing/content/printdialog.js
toolkit/components/printing/content/printjoboptions.js
toolkit/components/prompts/test/test_bug619644.html
toolkit/components/satchel/test/test_form_autocomplete.html
toolkit/components/satchel/test/test_form_autocomplete_with_list.html
toolkit/components/social/WorkerAPI.jsm
toolkit/components/telemetry/tests/unit/test_TelemetryController.js
toolkit/components/telemetry/tests/unit/test_TelemetryLateWrites.js
toolkit/components/telemetry/tests/unit/test_TelemetryLockCount.js
toolkit/components/telemetry/tests/unit/test_nsITelemetry.js
toolkit/components/thumbnails/test/browser_thumbnails_storage.js
toolkit/components/timermanager/nsUpdateTimerManager.js
toolkit/components/viewconfig/content/config.js
toolkit/content/findUtils.js
toolkit/content/finddialog.js
toolkit/content/globalOverlay.js
toolkit/content/nsDragAndDrop.js
toolkit/content/tests/browser/browser_bug295977_autoscroll_overflow.js
toolkit/content/tests/browser/browser_bug982298.js
toolkit/content/tests/browser/browser_f7_caret_browsing.js
toolkit/content/tests/chrome/RegisterUnregisterChrome.js
toolkit/content/tests/chrome/popup_trigger.js
toolkit/content/tests/chrome/xul_selectcontrol.js
toolkit/content/tests/unit/test_contentAreaUtils.js
toolkit/content/tests/widgets/popup_shared.js
toolkit/content/tests/widgets/tree_shared.js
toolkit/content/widgets/button.xml
toolkit/content/widgets/colorpicker.xml
toolkit/content/widgets/datetimepicker.xml
toolkit/content/widgets/dialog.xml
toolkit/content/widgets/filefield.xml
toolkit/content/widgets/listbox.xml
toolkit/content/widgets/popup.xml
toolkit/content/widgets/preferences.xml
toolkit/content/widgets/progressmeter.xml
toolkit/content/widgets/radio.xml
toolkit/content/widgets/scrollbox.xml
toolkit/content/widgets/spinbuttons.xml
toolkit/content/widgets/textbox.xml
toolkit/content/widgets/toolbar.xml
toolkit/content/widgets/tree.xml
toolkit/content/widgets/wizard.xml
toolkit/identity/tests/unit/test_log_utils.js
toolkit/modules/CertUtils.jsm
toolkit/modules/debug.js
toolkit/modules/tests/xpcshell/test_Promise.js
toolkit/mozapps/downloads/content/download.xml
toolkit/mozapps/downloads/content/downloads.js
toolkit/mozapps/downloads/content/helperApps.js
toolkit/mozapps/downloads/tests/chrome/utils.js
toolkit/mozapps/extensions/ChromeManifestParser.jsm
toolkit/mozapps/extensions/content/list.js
toolkit/mozapps/extensions/content/selectAddons.xml
toolkit/mozapps/extensions/content/setting.xml
toolkit/mozapps/extensions/content/xpinstallConfirm.js
toolkit/mozapps/extensions/test/browser/browser_bug557956.js
toolkit/mozapps/extensions/test/browser/browser_bug562797.js
toolkit/mozapps/extensions/test/browser/browser_bug562890.js
toolkit/mozapps/extensions/test/browser/browser_bug567127.js
toolkit/mozapps/extensions/test/browser/browser_bug570760.js
toolkit/mozapps/extensions/test/browser/browser_bug573062.js
toolkit/mozapps/extensions/test/browser/browser_bug587970.js
toolkit/mozapps/extensions/test/browser/browser_bug593535.js
toolkit/mozapps/extensions/test/browser/browser_bug608316.js
toolkit/mozapps/extensions/test/browser/browser_bug618502.js
toolkit/mozapps/extensions/test/browser/browser_discovery.js
toolkit/mozapps/extensions/test/browser/browser_list.js
toolkit/mozapps/extensions/test/browser/browser_manualupdates.js
toolkit/mozapps/extensions/test/browser/browser_recentupdates.js
toolkit/mozapps/extensions/test/browser/browser_searching.js
toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository.js
toolkit/mozapps/extensions/test/xpcshell/test_ChromeManifestParser.js
toolkit/mozapps/extensions/test/xpcshell/test_bug455906.js
toolkit/mozapps/extensions/test/xpcshell/test_bug468528.js
toolkit/mozapps/extensions/test/xpcshell/test_bug514327_3.js
toolkit/mozapps/extensions/test/xpcshell/test_bug563256.js
toolkit/mozapps/extensions/test/xpcshell/test_bug594058.js
toolkit/mozapps/extensions/test/xpcshell/test_bug619730.js
toolkit/mozapps/extensions/test/xpcshell/test_compatoverrides.js
toolkit/mozapps/extensions/test/xpcshell/test_dictionary.js
toolkit/mozapps/extensions/test/xpcshell/test_duplicateplugins.js
toolkit/mozapps/extensions/test/xpcshell/test_filepointer.js
toolkit/mozapps/extensions/test/xpcshell/test_hasbinarycomponents.js
toolkit/mozapps/extensions/test/xpcshell/test_isDebuggable.js
toolkit/mozapps/extensions/test/xpcshell/test_migrate4.js
toolkit/mozapps/extensions/test/xpcshell/test_migrate_max_version.js
toolkit/mozapps/extensions/test/xpcshell/test_plugins.js
toolkit/mozapps/extensions/test/xpcshell/test_strictcompatibility.js
toolkit/mozapps/extensions/test/xpinstall/browser_localfile2.js
toolkit/mozapps/extensions/test/xpinstall/browser_signed_multiple.js
toolkit/mozapps/handling/content/dialog.js
toolkit/mozapps/handling/nsContentDispatchChooser.js
toolkit/mozapps/preferences/changemp.js
toolkit/mozapps/preferences/fontbuilder.js
toolkit/mozapps/preferences/removemp.js
toolkit/mozapps/update/content/history.js
toolkit/mozapps/update/content/updates.xml
toolkit/mozapps/update/tests/unit_aus_update/downloadCompleteAfterPartialFailure.js
toolkit/mozapps/update/tests/unit_aus_update/updateManagerXML.js
toolkit/mozapps/update/tests/unit_base_updater/marAppInUseStageSuccessComplete_unix.js
toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessComplete.js
toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessCompleteSvc.js
toolkit/obsolete/content/dialogOverlay.js
toolkit/obsolete/content/nsClipboard.js
toolkit/obsolete/content/nsUserSettings.js
toolkit/obsolete/content/strres.js
toolkit/profile/content/createProfileWizard.js
--- a/browser/base/content/browser-places.js
+++ b/browser/base/content/browser-places.js
@@ -347,17 +347,17 @@ var PlacesCommandHook = {
         // but open right into the "edit" state, start batching here, so
         // "Cancel" in that state removes the bookmark.
         StarUI.beginBatch();
       }
 
       var parent = aParent !== undefined ?
                    aParent : PlacesUtils.unfiledBookmarksFolderId;
       var descAnno = { name: PlacesUIUtils.DESCRIPTION_ANNO, value: description };
-      var txn = new PlacesCreateBookmarkTransaction(uri, parent, 
+      var txn = new PlacesCreateBookmarkTransaction(uri, parent,
                                                     PlacesUtils.bookmarks.DEFAULT_INDEX,
                                                     title, null, [descAnno]);
       PlacesUtils.transactionManager.doTransaction(txn);
       itemId = txn.item.id;
       // Set the character-set.
       if (charset && !PrivateBrowsingUtils.isBrowserPrivate(aBrowser))
         PlacesUtils.setCharsetForURI(uri, charset);
     }
@@ -473,17 +473,17 @@ var PlacesCommandHook = {
         resolve(msg.data);
       });
 
       mm.sendAsyncMessage("Bookmarks:GetPageDetails", { })
     });
   },
 
   /**
-   * Adds a bookmark to the page loaded in the current tab. 
+   * Adds a bookmark to the page loaded in the current tab.
    */
   bookmarkCurrentPage: function PCH_bookmarkCurrentPage(aShowEditUI, aParent) {
     this.bookmarkPage(gBrowser.selectedBrowser, aParent, aShowEditUI);
   },
 
   /**
    * Adds a bookmark to the page targeted by a link.
    * @param aParent
@@ -535,17 +535,17 @@ var PlacesCommandHook = {
         uniquePages[spec] = null;
         URIs.push(tab.linkedBrowser.currentURI);
       }
     });
     return URIs;
   },
 
   /**
-   * Adds a folder with bookmarks to all of the currently open tabs in this 
+   * Adds a folder with bookmarks to all of the currently open tabs in this
    * window.
    */
   bookmarkCurrentPages: function PCH_bookmarkCurrentPages() {
     let pages = this.uniqueCurrentPages;
     if (pages.length > 1) {
     PlacesUIUtils.showBookmarkDialog({ action: "add"
                                      , type: "folder"
                                      , URIList: pages
@@ -565,17 +565,17 @@ var PlacesCommandHook = {
 
     // Disable "Bookmark All Tabs" if there are less than two
     // "unique current pages".
     goSetCommandEnabled("Browser:BookmarkAllTabs",
                         this.uniqueCurrentPages.length >= 2);
   },
 
   /**
-   * Adds a Live Bookmark to a feed associated with the current page. 
+   * Adds a Live Bookmark to a feed associated with the current page.
    * @param     url
    *            The nsIURI of the page the feed was attached to
    * @title     title
    *            The title of the feed. Optional.
    * @subtitle  subtitle
    *            A short description of the feed. Optional.
    */
   addLiveBookmark: Task.async(function *(url, feedTitle, feedSubtitle) {
@@ -599,28 +599,28 @@ var PlacesCommandHook = {
                                      , defaultInsertionPoint: toolbarIP
                                      , hiddenRows: [ "feedLocation"
                                                    , "siteLocation"
                                                    , "description" ]
                                      }, window);
   }),
 
   /**
-   * Opens the Places Organizer. 
+   * Opens the Places Organizer.
    * @param   aLeftPaneRoot
    *          The query to select in the organizer window - options
    *          are: History, AllBookmarks, BookmarksMenu, BookmarksToolbar,
    *          UnfiledBookmarks, Tags and Downloads.
    */
   showPlacesOrganizer: function PCH_showPlacesOrganizer(aLeftPaneRoot) {
     var organizer = Services.wm.getMostRecentWindow("Places:Organizer");
     // Due to bug 528706, getMostRecentWindow can return closed windows.
     if (!organizer || organizer.closed) {
       // No currently open places window, so open one with the specified mode.
-      openDialog("chrome://browser/content/places/places.xul", 
+      openDialog("chrome://browser/content/places/places.xul",
                  "", "chrome,toolbar=yes,dialog=no,resizable", aLeftPaneRoot);
     }
     else {
       organizer.PlacesOrganizer.selectLeftPaneContainerByHierarchy(aLeftPaneRoot);
       organizer.focus();
     }
   }
 };
@@ -821,17 +821,17 @@ var BookmarksEventHandler = {
       this.onCommand(aEvent, aView);
     }
   },
 
   /**
    * Handler for command event for an item in the bookmarks toolbar.
    * Menus and submenus from the folder buttons bubble up to this handler.
    * Opens the item.
-   * @param aEvent 
+   * @param aEvent
    *        DOMEvent for the command
    * @param aView
    *        The places view which aEvent should be associated with.
    */
   onCommand: function BEH_onCommand(aEvent, aView) {
     var target = aEvent.originalTarget;
     if (target._placesNode)
       PlacesUIUtils.openNodeWithEvent(target._placesNode, aEvent, aView);
@@ -903,17 +903,17 @@ var PlacesMenuDNDHandler = {
   _closeDelayMs: 500,
   _loadTimer: null,
   _closeTimer: null,
   _closingTimerNode: null,
 
   /**
    * Called when the user enters the <menu> element during a drag.
    * @param   event
-   *          The DragEnter event that spawned the opening. 
+   *          The DragEnter event that spawned the opening.
    */
   onDragEnter: function PMDH_onDragEnter(event) {
     // Opening menus in a Places popup is handled by the view itself.
     if (!this._isStaticContainer(event.target))
       return;
 
     // If we re-enter the same menu or anchor before the close timer runs out,
     // we should ensure that we do not close:
@@ -974,49 +974,49 @@ var PlacesMenuDNDHandler = {
         popup.removeAttribute("autoopened");
         popup.hidePopup();
       }
     }, this._closeDelayMs, Ci.nsITimer.TYPE_ONE_SHOT);
   },
 
   /**
    * Determines if a XUL element represents a static container.
-   * @returns true if the element is a container element (menu or 
+   * @returns true if the element is a container element (menu or
    *`         menu-toolbarbutton), false otherwise.
    */
   _isStaticContainer: function PMDH__isContainer(node) {
     let isMenu = node.localName == "menu" ||
                  (node.localName == "toolbarbutton" &&
                   (node.getAttribute("type") == "menu" ||
                    node.getAttribute("type") == "menu-button"));
     let isStatic = !("_placesNode" in node) && node.lastChild &&
                    node.lastChild.hasAttribute("placespopup") &&
                    !node.parentNode.hasAttribute("placespopup");
     return isMenu && isStatic;
   },
 
   /**
    * Called when the user drags over the <menu> element.
    * @param   event
-   *          The DragOver event. 
+   *          The DragOver event.
    */
   onDragOver: function PMDH_onDragOver(event) {
     let ip = new InsertionPoint(PlacesUtils.bookmarksMenuFolderId,
                                 PlacesUtils.bookmarks.DEFAULT_INDEX,
                                 Components.interfaces.nsITreeView.DROP_ON);
     if (ip && PlacesControllerDragHelper.canDrop(ip, event.dataTransfer))
       event.preventDefault();
 
     event.stopPropagation();
   },
 
   /**
    * Called when the user drops on the <menu> element.
    * @param   event
-   *          The Drop event. 
+   *          The Drop event.
    */
   onDrop: function PMDH_onDrop(event) {
     // Put the item at the end of bookmark menu.
     let ip = new InsertionPoint(PlacesUtils.bookmarksMenuFolderId,
                                 PlacesUtils.bookmarks.DEFAULT_INDEX,
                                 Components.interfaces.nsITreeView.DROP_ON);
     PlacesControllerDragHelper.onDrop(ip, event.dataTransfer);
     PlacesControllerDragHelper.currentDropTarget = null;
--- a/browser/base/content/content.js
+++ b/browser/base/content/content.js
@@ -125,17 +125,17 @@ var handleContentContextMenu = function 
   let contentType = null;
   let contentDisposition = null;
   if (event.target.nodeType == Ci.nsIDOMNode.ELEMENT_NODE &&
       event.target instanceof Ci.nsIImageLoadingContent &&
       event.target.currentURI) {
     disableSetDesktopBg = disableSetDesktopBackground(event.target);
 
     try {
-      let imageCache = 
+      let imageCache =
         Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools)
                                         .getImgCacheForDocument(doc);
       let props =
         imageCache.findEntryProperties(event.target.currentURI, doc);
       try {
         contentType = props.get("type", Ci.nsISupportsCString).data;
       } catch(e) {}
       try {
--- a/browser/base/content/pageinfo/security.js
+++ b/browser/base/content/pageinfo/security.js
@@ -122,17 +122,17 @@ var security = {
   mapIssuerOrganization: function(name) {
     if (!name) return null;
 
     if (name == "RSA Data Security, Inc.") return "Verisign, Inc.";
 
     // No mapping required
     return name;
   },
-  
+
   /**
    * Open the cookie manager window
    */
   viewCookies : function()
   {
     var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                        .getService(Components.interfaces.nsIWindowMediator);
     var win = wm.getMostRecentWindow("Browser:Cookies");
@@ -178,17 +178,17 @@ function securityOnLoad(uri, windowInfo)
   else {
     document.getElementById("securityTab").hidden = false;
   }
 
   const pageInfoBundle = document.getElementById("pageinfobundle");
 
   /* Set Identity section text */
   setText("security-identity-domain-value", info.hostName);
-  
+
   var owner, verifier;
   if (info.cert && !info.isBroken) {
     // Try to pull out meaningful values.  Technically these fields are optional
     // so we'll employ fallbacks where appropriate.  The EV spec states that Org
     // fields must be specified for subject and issuer so that case is simpler.
     if (info.isEV) {
       owner = info.cert.organization;
       verifier = security.mapIssuerOrganization(info.cAName);
@@ -226,28 +226,28 @@ function securityOnLoad(uri, windowInfo)
   /* Set Privacy & History section text */
   var yesStr = pageInfoBundle.getString("yes");
   var noStr = pageInfoBundle.getString("no");
 
   setText("security-privacy-cookies-value",
           hostHasCookies(uri) ? yesStr : noStr);
   setText("security-privacy-passwords-value",
           realmHasPasswords(uri) ? yesStr : noStr);
-  
+
   var visitCount = previousVisitCount(info.hostName);
   if(visitCount > 1) {
     setText("security-privacy-history-value",
             pageInfoBundle.getFormattedString("securityNVisits", [visitCount.toLocaleString()]));
   }
   else if (visitCount == 1) {
     setText("security-privacy-history-value",
             pageInfoBundle.getString("securityOneVisit"));
   }
   else {
-    setText("security-privacy-history-value", noStr);        
+    setText("security-privacy-history-value", noStr);
   }
 
   /* Set the Technical Detail section messages */
   const pkiBundle = document.getElementById("pkiBundle");
   var hdr;
   var msg1;
   var msg2;
 
@@ -278,17 +278,17 @@ function securityOnLoad(uri, windowInfo)
     if (info.hostName != null)
       msg1 = pkiBundle.getFormattedString("pageInfo_Privacy_None1", [info.hostName]);
     else
       msg1 = pkiBundle.getString("pageInfo_Privacy_None3");
     msg2 = pkiBundle.getString("pageInfo_Privacy_None2");
   }
   setText("security-technical-shortform", hdr);
   setText("security-technical-longform1", msg1);
-  setText("security-technical-longform2", msg2); 
+  setText("security-technical-longform2", msg2);
 }
 
 function setText(id, value)
 {
   var element = document.getElementById(id);
   if (!element)
     return;
   if (element.localName == "textbox" || element.localName == "label")
@@ -333,23 +333,23 @@ function realmHasPasswords(uri) {
 /**
  * Return the number of previous visits recorded for host before today.
  *
  * @param host - the domain name to look for in history
  */
 function previousVisitCount(host, endTimeReference) {
   if (!host)
     return false;
-  
+
   var historyService = Components.classes["@mozilla.org/browser/nav-history-service;1"]
                                  .getService(Components.interfaces.nsINavHistoryService);
-    
+
   var options = historyService.getNewQueryOptions();
   options.resultType = options.RESULTS_AS_VISIT;
-  
+
   // Search for visits to this host before today
   var query = historyService.getNewQuery();
   query.endTimeReference = query.TIME_RELATIVE_TODAY;
   query.endTime = 0;
   query.domain = host;
 
   var result = historyService.executeQuery(query, options);
   result.root.containerOpen = true;
--- a/browser/base/content/sync/genericChange.js
+++ b/browser/base/content/sync/genericChange.js
@@ -116,17 +116,17 @@ var Change = {
   _clearStatus: function _clearStatus() {
     this._status.value = "";
     this._statusIcon.removeAttribute("status");
   },
 
   _updateStatus: function Change__updateStatus(str, state) {
      this._updateStatusWithString(this._str(str), state);
   },
-  
+
   _updateStatusWithString: function Change__updateStatusWithString(string, state) {
     this._statusRow.hidden = false;
     this._status.value = string;
     this._statusIcon.setAttribute("status", state);
 
     let error = state == "error";
     this._dialog.getButton("cancel").disabled = !error;
     this._dialog.getButton("finish").disabled = !error;
--- a/browser/base/content/urlbarBindings.xml
+++ b/browser/base/content/urlbarBindings.xml
@@ -1586,17 +1586,17 @@ file, You can obtain one at http://mozil
         this._updateProgressTimeout = setTimeout(this.updateProgress.bind(this), 0);
       ]]></constructor>
 
       <destructor><![CDATA[
         this.destroy();
       ]]></destructor>
 
       <field name="progressmeter" readonly="true">
-        document.getElementById("addon-progress-notification-progressmeter"); 
+        document.getElementById("addon-progress-notification-progressmeter");
       </field>
       <field name="progresstext" readonly="true">
         document.getElementById("addon-progress-notification-progresstext");
       </field>
       <field name="DownloadUtils" readonly="true">
         {
           let utils = {};
           Components.utils.import("resource://gre/modules/DownloadUtils.jsm", utils);
--- a/browser/base/content/utilityOverlay.js
+++ b/browser/base/content/utilityOverlay.js
@@ -109,18 +109,18 @@ function openUILink(url, event, aIgnoreB
  * On Windows, the modifiers are:
  * Ctrl        new tab, selected
  * Shift       new window
  * Ctrl+Shift  new tab, in background
  * Alt         save
  *
  * Middle-clicking is the same as Ctrl+clicking (it opens a new tab).
  *
- * Exceptions: 
- * - Alt is ignored for menu items selected using the keyboard so you don't accidentally save stuff.  
+ * Exceptions:
+ * - Alt is ignored for menu items selected using the keyboard so you don't accidentally save stuff.
  *    (Currently, the Alt isn't sent here at all for menu items, but that will change in bug 126189.)
  * - Alt is hard to use in context menus, because pressing Alt closes the menu.
  * - Alt can't be used on the bookmarks toolbar because Alt is used for "treat this as something draggable".
  * - The button is ignored for the middle-click-paste-URL feature, since it's always a middle-click.
  */
 function whereToOpenLink( e, ignoreButton, ignoreAlt )
 {
   // This method must treat a null event like a left click without modifier keys (i.e.
@@ -411,17 +411,17 @@ function closeMenus(node)
     && (node.tagName == "menupopup" || node.tagName == "popup"))
       node.hidePopup();
 
     closeMenus(node.parentNode);
   }
 }
 
 // Gather all descendent text under given document node.
-function gatherTextUnder ( root ) 
+function gatherTextUnder ( root )
 {
   var text = "";
   var node = root.firstChild;
   var depth = 1;
   while ( node && depth > 0 ) {
     // See if this node is text.
     if ( node.nodeType == Node.TEXT_NODE ) {
       // Add this text to our collection.
@@ -668,17 +668,17 @@ function makeURLAbsolute(aBase, aUrl)
  * @param aAllowThirdPartyFixup
  *        If true, then we allow the URL text to be sent to third party services
  *        (e.g., Google's I Feel Lucky) for interpretation. This parameter may
  *        be undefined in which case it is treated as false.
  * @param [optional] aReferrer
  *        This will be used as the referrer. There will be no security check.
  * @param [optional] aReferrerPolicy
  *        Referrer policy - Ci.nsIHttpChannel.REFERRER_POLICY_*.
- */ 
+ */
 function openNewTabWith(aURL, aDocument, aPostData, aEvent,
                         aAllowThirdPartyFixup, aReferrer, aReferrerPolicy) {
 
   // As in openNewWindowWith(), we want to pass the charset of the
   // current document over to a new tab.
   let originCharset = null;
   if (document.documentElement.getAttribute("windowtype") == "navigator:browser")
     originCharset = gBrowser.selectedBrowser.characterSet;
@@ -723,17 +723,17 @@ function openHelpLink(aHelpTopic, aCalle
   var where = aWhere;
   if (!aWhere)
     where = aCalledFromModal ? "window" : "tab";
 
   openUILinkIn(url, where);
 }
 
 function openPrefsHelp() {
-  // non-instant apply prefwindows are usually modal, so we can't open in the topmost window, 
+  // non-instant apply prefwindows are usually modal, so we can't open in the topmost window,
   // since its probably behind the window.
   var instantApply = getBoolPref("browser.preferences.instantApply");
 
   var helpTopic = document.getElementsByTagName("prefwindow")[0].currentPane.helpTopic;
   openHelpLink(helpTopic, !instantApply);
 }
 
 function trimURL(aURL) {
--- a/browser/base/content/web-panels.js
+++ b/browser/base/content/web-panels.js
@@ -12,27 +12,27 @@ function getPanelBrowser()
     return document.getElementById("web-panels-browser");
 }
 
 var panelProgressListener = {
     onProgressChange : function (aWebProgress, aRequest,
                                  aCurSelfProgress, aMaxSelfProgress,
                                  aCurTotalProgress, aMaxTotalProgress) {
     },
-    
+
     onStateChange : function(aWebProgress, aRequest, aStateFlags, aStatus)
     {
         if (!aRequest)
           return;
 
         //ignore local/resource:/chrome: files
         if (aStatus == NS_NET_STATUS_READ_FROM || aStatus == NS_NET_STATUS_WROTE_TO)
            return;
 
-        if (aStateFlags & Ci.nsIWebProgressListener.STATE_START && 
+        if (aStateFlags & Ci.nsIWebProgressListener.STATE_START &&
             aStateFlags & Ci.nsIWebProgressListener.STATE_IS_NETWORK) {
             window.parent.document.getElementById('sidebar-throbber').setAttribute("loading", "true");
         }
         else if (aStateFlags & Ci.nsIWebProgressListener.STATE_STOP &&
                 aStateFlags & Ci.nsIWebProgressListener.STATE_IS_NETWORK) {
             window.parent.document.getElementById('sidebar-throbber').removeAttribute("loading");
         }
     }
@@ -40,17 +40,17 @@ var panelProgressListener = {
 
     onLocationChange : function(aWebProgress, aRequest, aLocation, aFlags) {
         UpdateBackForwardCommands(getPanelBrowser().webNavigation);
     },
 
     onStatusChange : function(aWebProgress, aRequest, aStatus, aMessage) {
     },
 
-    onSecurityChange : function(aWebProgress, aRequest, aState) { 
+    onSecurityChange : function(aWebProgress, aRequest, aState) {
     },
 
     QueryInterface : function(aIID)
     {
         if (aIID.equals(Ci.nsIWebProgressListener) ||
             aIID.equals(Ci.nsISupportsWeakReference) ||
             aIID.equals(Ci.nsISupports))
             return this;
--- a/browser/branding/aurora/pref/firefox-branding.js
+++ b/browser/branding/aurora/pref/firefox-branding.js
@@ -14,17 +14,17 @@ pref("app.update.interval", 28800); // 8
 // 0 means "download everything at once"
 pref("app.update.download.backgroundInterval", 0);
 // Give the user x seconds to react before showing the big UI. default=168 hours
 pref("app.update.promptWaitTime", 604800);
 // URL user can browse to manually if for some reason all update installation
 // attempts fail.
 pref("app.update.url.manual", "https://www.mozilla.org/firefox/aurora/");
 // A default value for the "More information about this update" link
-// supplied in the "An update is available" page of the update wizard. 
+// supplied in the "An update is available" page of the update wizard.
 pref("app.update.url.details", "https://www.mozilla.org/firefox/aurora/");
 
 // The number of days a binary is permitted to be old
 // without checking for an update.  This assumes that
 // app.update.checkInstallTime is true.
 pref("app.update.checkInstallTime.days", 2);
 
 // Give the user x seconds to reboot before showing a badge on the hamburger
--- a/browser/branding/nightly/pref/firefox-branding.js
+++ b/browser/branding/nightly/pref/firefox-branding.js
@@ -12,17 +12,17 @@ pref("app.update.interval", 7200); // 2 
 // 0 means "download everything at once"
 pref("app.update.download.backgroundInterval", 0);
 // Give the user x seconds to react before showing the big UI. default=12 hours
 pref("app.update.promptWaitTime", 43200);
 // URL user can browse to manually if for some reason all update installation
 // attempts fail.
 pref("app.update.url.manual", "https://nightly.mozilla.org");
 // A default value for the "More information about this update" link
-// supplied in the "An update is available" page of the update wizard. 
+// supplied in the "An update is available" page of the update wizard.
 pref("app.update.url.details", "https://nightly.mozilla.org");
 
 // The number of days a binary is permitted to be old
 // without checking for an update.  This assumes that
 // app.update.checkInstallTime is true.
 pref("app.update.checkInstallTime.days", 2);
 
 // Give the user x seconds to reboot before showing a badge on the hamburger
--- a/browser/branding/official/pref/firefox-branding.js
+++ b/browser/branding/official/pref/firefox-branding.js
@@ -11,17 +11,17 @@ pref("app.update.interval", 43200); // 1
 // background (in seconds)
 pref("app.update.download.backgroundInterval", 60);
 // Give the user x seconds to react before showing the big UI. default=48 hours
 pref("app.update.promptWaitTime", 172800);
 // URL user can browse to manually if for some reason all update installation
 // attempts fail.
 pref("app.update.url.manual", "https://www.mozilla.org/firefox/");
 // A default value for the "More information about this update" link
-// supplied in the "An update is available" page of the update wizard. 
+// supplied in the "An update is available" page of the update wizard.
 pref("app.update.url.details", "https://www.mozilla.org/%LOCALE%/firefox/notes");
 
 // The number of days a binary is permitted to be old
 // without checking for an update.  This assumes that
 // app.update.checkInstallTime is true.
 pref("app.update.checkInstallTime.days", 63);
 
 // Give the user x seconds to reboot before showing a badge on the hamburger
--- a/browser/branding/unofficial/pref/firefox-branding.js
+++ b/browser/branding/unofficial/pref/firefox-branding.js
@@ -11,17 +11,17 @@ pref("app.update.interval", 86400); // 2
 // background (in seconds)
 pref("app.update.download.backgroundInterval", 60);
 // Give the user x seconds to react before showing the big UI. default=24 hours
 pref("app.update.promptWaitTime", 86400);
 // URL user can browse to manually if for some reason all update installation
 // attempts fail.
 pref("app.update.url.manual", "https://nightly.mozilla.org");
 // A default value for the "More information about this update" link
-// supplied in the "An update is available" page of the update wizard. 
+// supplied in the "An update is available" page of the update wizard.
 pref("app.update.url.details", "https://nightly.mozilla.org");
 
 // The number of days a binary is permitted to be old
 // without checking for an update.  This assumes that
 // app.update.checkInstallTime is true.
 pref("app.update.checkInstallTime.days", 2);
 
 // Give the user x seconds to reboot before showing a badge on the hamburger
--- a/browser/components/customizableui/test/browser_945739_showInPrivateBrowsing_customize_mode.js
+++ b/browser/components/customizableui/test/browser_945739_showInPrivateBrowsing_customize_mode.js
@@ -22,14 +22,14 @@ add_task(function* testPrivateBrowsingCu
 
   let privateWindow = yield openAndLoadWindow({private: true});
   let privateWidgetArray = CustomizableUI.getUnusedWidgets(privateWindow.gNavToolbox.palette);
   privateWidgetArray = privateWidgetArray.map((w) => w.id);
   is(privateWidgetArray.indexOf(kWidgetId), -1,
      "Widget should not appear as unused in private window");
   yield promiseWindowClosed(privateWindow);
 
-  CustomizableUI.destroyWidget(kWidgetId); 
+  CustomizableUI.destroyWidget(kWidgetId);
 });
 
 add_task(function* asyncCleanup() {
   yield resetCustomization();
 });
--- a/browser/components/customizableui/test/head.js
+++ b/browser/components/customizableui/test/head.js
@@ -138,17 +138,17 @@ function placementArraysEqual(areaId, ac
   let minItems = Math.min(expectedPlacements.length, actualPlacements.length);
   for (let i = 0; i < minItems; i++) {
     if (typeof expectedPlacements[i] == "string") {
       is(actualPlacements[i], expectedPlacements[i],
          "Item " + i + " in " + areaId + " should match expectations.");
     } else if (expectedPlacements[i] instanceof RegExp) {
       ok(expectedPlacements[i].test(actualPlacements[i]),
          "Item " + i + " (" + actualPlacements[i] + ") in " +
-         areaId + " should match " + expectedPlacements[i]); 
+         areaId + " should match " + expectedPlacements[i]);
     } else {
       ok(false, "Unknown type of expected placement passed to " +
                 " assertAreaPlacements. Is your test broken?");
     }
   }
 }
 
 function todoAssertAreaPlacements(areaId, expectedPlacements) {
--- a/browser/components/nsBrowserContentHandler.js
+++ b/browser/components/nsBrowserContentHandler.js
@@ -72,17 +72,17 @@ function resolveURIInternal(aCmdLine, aA
       return uri;
   }
   catch (e) {
     Components.utils.reportError(e);
   }
 
   // We have interpreted the argument as a relative file URI, but the file
   // doesn't exist. Try URI fixup heuristics: see bug 290782.
- 
+
   try {
     uri = urifixup.createFixupURI(aArgument, 0);
   }
   catch (e) {
     Components.utils.reportError(e);
   }
 
   return uri;
@@ -124,17 +124,17 @@ function needHomepageOverride(prefb) {
 
   if (mstone != savedmstone) {
     // Bug 462254. Previous releases had a default pref to suppress the EULA
     // agreement if the platform's installer had already shown one. Now with
     // about:rights we've removed the EULA stuff and default pref, but we need
     // a way to make existing profiles retain the default that we removed.
     if (savedmstone)
       prefb.setBoolPref("browser.rights.3.shown", true);
-    
+
     prefb.setCharPref("browser.startup.homepage_override.mstone", mstone);
     prefb.setCharPref("browser.startup.homepage_override.buildID", buildID);
     return (savedmstone ? OVERRIDE_NEW_MSTONE : OVERRIDE_NEW_PROFILE);
   }
 
   if (buildID != savedBuildID) {
     prefb.setCharPref("browser.startup.homepage_override.buildID", buildID);
     return OVERRIDE_NEW_BUILD_ID;
@@ -190,17 +190,17 @@ function openWindow(parent, url, target,
     if (args) {
       argstring = Components.classes["@mozilla.org/supports-string;1"]
                             .createInstance(nsISupportsString);
       argstring.data = args;
     }
 
     return wwatch.openWindow(parent, url, target, features, argstring);
   }
-  
+
   // Pass an array to avoid the browser "|"-splitting behavior.
   var argArray = Components.classes["@mozilla.org/supports-array;1"]
                     .createInstance(Components.interfaces.nsISupportsArray);
 
   // add args to the arguments array
   var stringArgs = null;
   if (args instanceof Array) // array
     stringArgs = args;
--- a/browser/components/places/content/browserPlacesViews.js
+++ b/browser/components/places/content/browserPlacesViews.js
@@ -1227,17 +1227,17 @@ PlacesToolbar.prototype = {
     let childOverflowed = false;
     for (let i = 0; i < this._rootElt.childNodes.length; i++) {
       let child = this._rootElt.childNodes[i];
       // Once a child overflows, all the next ones will.
       if (!childOverflowed) {
         let childRect = child.getBoundingClientRect();
         childOverflowed = this.isRTL ? (childRect.left < scrollRect.left)
                                      : (childRect.right > scrollRect.right);
-                                      
+
       }
       child.style.visibility = childOverflowed ? "hidden" : "visible";
     }
 
     // We rebuild the chevron on popupShowing, so if it is open
     // we must update it.
     if (this._chevron.open)
       this._updateChevronPopupNodesVisibility();
--- a/browser/components/places/content/controller.js
+++ b/browser/components/places/content/controller.js
@@ -965,17 +965,17 @@ PlacesController.prototype = {
       }
     }
 
     // Do removal in chunks to give some breath to main-thread.
     function* pagesChunkGenerator(aURIs) {
       while (aURIs.length) {
         let URIslice = aURIs.splice(0, REMOVE_PAGES_CHUNKLEN);
         PlacesUtils.bhistory.removePages(URIslice, URIslice.length);
-        Services.tm.mainThread.dispatch(() => gen.next(), 
+        Services.tm.mainThread.dispatch(() => gen.next(),
                                         Ci.nsIThread.DISPATCH_NORMAL);
         yield unefined;
       }
     }
     let gen = pagesChunkGenerator(URIs);
     gen.next();
   },
 
--- a/browser/components/places/content/history-panel.js
+++ b/browser/components/places/content/history-panel.js
@@ -15,25 +15,25 @@ function HistorySidebarInit()
   gHistoryTree = document.getElementById("historyTree");
   gSearchBox = document.getElementById("search-box");
 
   gHistoryGrouping = document.getElementById("viewButton").
                               getAttribute("selectedsort");
 
   if (gHistoryGrouping == "site")
     document.getElementById("bysite").setAttribute("checked", "true");
-  else if (gHistoryGrouping == "visited") 
+  else if (gHistoryGrouping == "visited")
     document.getElementById("byvisited").setAttribute("checked", "true");
   else if (gHistoryGrouping == "lastvisited")
     document.getElementById("bylastvisited").setAttribute("checked", "true");
   else if (gHistoryGrouping == "dayandsite")
     document.getElementById("bydayandsite").setAttribute("checked", "true");
   else
     document.getElementById("byday").setAttribute("checked", "true");
-  
+
   searchHistory("");
 }
 
 function GroupBy(groupingType)
 {
   gHistoryGrouping = groupingType;
   searchHistory(gSearchBox.value);
 }
--- a/browser/components/places/content/places.js
+++ b/browser/components/places/content/places.js
@@ -769,17 +769,17 @@ var PlacesOrganizer = {
 var PlacesSearchBox = {
 
   /**
    * The Search text field
    */
   get searchFilter() {
     return document.getElementById("searchFilter");
   },
-   
+
   /**
    * Folders to include when searching.
    */
   _folders: [],
   get folders() {
     if (this._folders.length == 0) {
       this._folders.push(PlacesUtils.bookmarksMenuFolderId,
                          PlacesUtils.unfiledBookmarksFolderId,
@@ -889,17 +889,17 @@ var PlacesSearchBox = {
     switch (this.filterCollection) {
       case "history":
         title = PlacesUIUtils.getString("searchHistory");
         break;
       case "downloads":
         title = PlacesUIUtils.getString("searchDownloads");
         break;
       default:
-        title = PlacesUIUtils.getString("searchBookmarks");                                    
+        title = PlacesUIUtils.getString("searchBookmarks");
     }
     this.searchFilter.placeholder = title;
   },
 
   /**
    * Gets/sets the active collection from the dropdown menu.
    */
   get filterCollection() {
--- a/browser/components/places/content/treeView.js
+++ b/browser/components/places/content/treeView.js
@@ -225,17 +225,17 @@ PlacesTreeView.prototype = {
 
   /**
    * Gets the node at a given row.
    */
   _getNodeForRow: function PTV__getNodeForRow(aRow) {
     if (aRow < 0) {
       return null;
     }
-  
+
     let node = this._rows[aRow];
     if (node !== undefined)
       return node;
 
     // Find the nearest node.
     let rowNode, row;
     for (let i = aRow - 1; i >= 0 && rowNode === undefined; i--) {
       rowNode = this._rows[i];
@@ -880,17 +880,17 @@ PlacesTreeView.prototype = {
         (this._flatList && aNode == this._rootNode)) {
       let queryOptions = PlacesUtils.asQuery(this._rootNode).queryOptions;
       if (queryOptions.excludeItems) {
         return;
       }
 
       PlacesUtils.livemarks.getLivemark({ id: aNode.itemId })
         .then(aLivemark => {
-          let shouldInvalidate = 
+          let shouldInvalidate =
             !this._controller.hasCachedLivemarkInfo(aNode);
           this._controller.cacheLivemarkInfo(aNode, aLivemark);
           if (aNewState == Components.interfaces.nsINavHistoryContainerResultNode.STATE_OPENED) {
             aLivemark.registerForUpdates(aNode, this);
             // Prioritize the current livemark.
             aLivemark.reload();
             PlacesUtils.livemarks.reloadLivemarks();
             if (shouldInvalidate)
--- a/browser/components/places/tests/browser/browser_475045.js
+++ b/browser/components/places/tests/browser/browser_475045.js
@@ -21,44 +21,44 @@ add_task(function* test() {
 
   // Setup the node we will use to be dropped. The actual node used does not
   // matter because we will set its data, effect, and mimeType manually.
   let placesItems = document.getElementById("PlacesToolbarItems");
   ok(placesItems, "PlacesToolbarItems should not be null");
   ok(placesItems.localName == "scrollbox", "PlacesToolbarItems should not be null");
   ok(placesItems.childNodes[0], "PlacesToolbarItems must have at least one child");
 
-  /** 
+  /**
    * Simulates a drop of a URI onto the bookmarks bar.
-   * 
+   *
    * @param aEffect
    *        The effect to use for the drop operation: move, copy, or link.
    * @param aMimeType
    *        The mime type to use for the drop operation.
    */
   let simulateDragDrop = function(aEffect, aMimeType) {
     const uriSpec = "http://www.mozilla.org/D1995729-A152-4e30-8329-469B01F30AA7";
     let uri = makeURI(uriSpec);
     ChromeUtils.synthesizeDrop(placesItems.childNodes[0],
-                              placesItems, 
-                              [[{type: aMimeType, 
-                                data: uriSpec}]], 
+                              placesItems,
+                              [[{type: aMimeType,
+                                data: uriSpec}]],
                               aEffect, window);
 
     // Verify that the drop produces exactly one bookmark.
     let bookmarkIds = PlacesUtils.bookmarks
                       .getBookmarkIdsForURI(uri);
     ok(bookmarkIds.length == 1, "There should be exactly one bookmark");
-    
+
     PlacesUtils.bookmarks.removeItem(bookmarkIds[0]);
 
     // Verify that we removed the bookmark successfully.
     ok(!PlacesUtils.bookmarks.isBookmarked(uri), "URI should be removed");
-  } 
-  
+  }
+
   // Simulate a bookmark drop for all of the mime types and effects.
   let mimeTypes = ["text/plain", "text/unicode", "text/x-moz-url"];
   let effects = ["move", "copy", "link"];
   effects.forEach(function (effect) {
     mimeTypes.forEach(function (mimeType) {
       simulateDragDrop(effect, mimeType);
     });
   });
--- a/browser/components/places/tests/browser/browser_views_liveupdate.js
+++ b/browser/components/places/tests/browser/browser_views_liveupdate.js
@@ -44,17 +44,17 @@ function openBookmarksSidebar() {
  * Simulates popup opening causing it to populate.
  * We cannot just use menu.open, since it would not work on Mac due to native menubar.
  */
 function fakeOpenPopup(aPopup) {
   var popupEvent = document.createEvent("MouseEvent");
   popupEvent.initMouseEvent("popupshowing", true, true, window, 0,
                             0, 0, 0, 0, false, false, false, false,
                             0, null);
-  aPopup.dispatchEvent(popupEvent);  
+  aPopup.dispatchEvent(popupEvent);
 }
 
 /**
  * Adds bookmarks observer, and executes a bunch of bookmarks operations.
  */
 function startTest() {
   var bs = PlacesUtils.bookmarks;
   // Add observers.
@@ -469,12 +469,12 @@ function getViewsForFolder(aFolderId) {
     case PlacesUtils.toolbarFolderId:
       return ["toolbar", "sidebar"]
       break;
     case PlacesUtils.bookmarksMenuFolderId:
       return ["menu", "sidebar"]
       break;
     case PlacesUtils.unfiledBookmarksFolderId:
       return ["sidebar"]
-      break;    
+      break;
   }
   return new Array();
 }
--- a/browser/components/places/tests/unit/test_PUIU_makeTransaction.js
+++ b/browser/components/places/tests/unit/test_PUIU_makeTransaction.js
@@ -223,17 +223,17 @@ add_test(function test_separator()
     } catch(ex) {
       do_throw(ex);
     }
   }, "random-anno");
 
   let id = PlacesUtils.bookmarks.insertSeparator(PlacesUtils.unfiledBookmarksFolderId,
                                                  PlacesUtils.bookmarks.DEFAULT_INDEX);
   PlacesUtils.annotations.setItemAnnotation(id, "random-anno",
-                                            "random-value", 0, 
+                                            "random-value", 0,
                                             PlacesUtils.annotations.EXPIRE_NEVER);
 });
 
 add_test(function test_bookmark()
 {
   const TEST_URL = "http://places.moz.org/"
   const TEST_TITLE = "Places bookmark"
 
--- a/browser/components/safebrowsing/content/test/browser_bug400731.js
+++ b/browser/components/safebrowsing/content/test/browser_bug400731.js
@@ -1,15 +1,15 @@
 /* Check for the intended visibility of the "Ignore this warning" text*/
 
 function test() {
   waitForExplicitFinish();
-  
+
   gBrowser.selectedTab = gBrowser.addTab();
-  
+
   // Navigate to malware site.  Can't use an onload listener here since
   // error pages don't fire onload.  Also can't register the DOMContentLoaded
   // handler here because registering it too soon would mean that we might
   // get it for about:blank, and not about:blocked.
   gBrowser.addTabsProgressListener({
     onLocationChange: function(aTab, aWebProgress, aRequest, aLocation, aFlags) {
       if (aFlags & Ci.nsIWebProgressListener.LOCATION_CHANGE_ERROR_PAGE) {
         gBrowser.removeTabsProgressListener(this);
@@ -25,17 +25,17 @@ function testMalware(event) {
     return;
   }
 
   window.removeEventListener("DOMContentLoaded", testMalware, true);
 
   // Confirm that "Ignore this warning" is visible - bug 422410
   var el = content.document.getElementById("ignoreWarningButton");
   ok(el, "Ignore warning button should be present for malware");
-  
+
   var style = content.getComputedStyle(el, null);
   is(style.display, "inline-block", "Ignore Warning button should be display:inline-block for malware");
 
   Services.prefs.setBoolPref("browser.safebrowsing.allowOverride", false);
 
   // Now launch the unwanted software test
   window.addEventListener("DOMContentLoaded", testUnwanted, true);
   content.location = "http://www.itisatrap.org/firefox/unwanted.html";
@@ -60,18 +60,18 @@ function testUnwanted(event) {
 }
 
 function testPhishing(event) {
   if (event.target != gBrowser.selectedBrowser.contentDocument) {
     return;
   }
 
   window.removeEventListener("DOMContentLoaded", testPhishing, true);
-  
+
   var el = content.document.getElementById("ignoreWarningButton");
   ok(el, "Ignore warning button should be present for phishing");
-  
+
   var style = content.getComputedStyle(el, null);
   is(style.display, "inline-block", "Ignore Warning button should be display:inline-block for phishing");
-  
+
   gBrowser.removeCurrentTab();
   finish();
 }
--- a/browser/components/safebrowsing/content/test/browser_bug415846.js
+++ b/browser/components/safebrowsing/content/test/browser_bug415846.js
@@ -16,47 +16,47 @@ function test() {
 }
 
 function testNormal() {
   gBrowser.removeEventListener("DOMContentLoaded", testNormal, false);
 
   // open the menu, to force it to update
   menu = document.getElementById("menu_HelpPopup");
   ok(menu, "Help menu should exist!");
-  
+
   menu.addEventListener("popupshown", testNormal_PopupListener, false);
   menu.openPopup(null, "", 0, 0, false, null);
 }
 
 function testNormal_PopupListener() {
   menu.removeEventListener("popupshown", testNormal_PopupListener, false);
-  
+
   var reportMenu = document.getElementById("menu_HelpPopup_reportPhishingtoolmenu");
   var errorMenu = document.getElementById("menu_HelpPopup_reportPhishingErrortoolmenu");
   is(reportMenu.hidden, false, "Report phishing menu should be visible on normal sites");
   is(errorMenu.hidden, true, "Report error menu item should be hidden on normal sites");
   menu.hidePopup();
-  
+
   // Now launch the phishing test.  Can't use onload here because error pages don't
   // fire normal load events.
   window.addEventListener("DOMContentLoaded", testPhishing, true);
   content.location = "http://www.itisatrap.org/firefox/its-a-trap.html";
 }
 
 function testPhishing() {
   window.removeEventListener("DOMContentLoaded", testPhishing, true);
 
   menu.addEventListener("popupshown", testPhishing_PopupListener, false);
   menu.openPopup(null, "", 0, 0, false, null);
 }
 
 function testPhishing_PopupListener() {
   menu.removeEventListener("popupshown", testPhishing_PopupListener, false);
-  
+
   var reportMenu = document.getElementById("menu_HelpPopup_reportPhishingtoolmenu");
   var errorMenu = document.getElementById("menu_HelpPopup_reportPhishingErrortoolmenu");
   is(reportMenu.hidden, true, "Report phishing menu should be hidden on phishing sites");
   is(errorMenu.hidden, false, "Report error menu item should be visible on phishing sites");
   menu.hidePopup();
-  
+
   gBrowser.removeCurrentTab();
   finish();
 }
--- a/browser/components/search/test/browser_bing_behavior.js
+++ b/browser/components/search/test/browser_bing_behavior.js
@@ -12,17 +12,17 @@ const BROWSER_SEARCH_PREF = "browser.sea
 
 function test() {
   let engine = Services.search.getEngineByName("Bing");
   ok(engine, "Bing is installed");
 
   let previouslySelectedEngine = Services.search.currentEngine;
   Services.search.currentEngine = engine;
   engine.alias = "b";
-  
+
   let base = "https://www.bing.com/search?q=foo&pc=MOZI";
   let url;
 
   // Test search URLs (including purposes).
   url = engine.getSubmission("foo").uri.spec;
   is(url, base, "Check search URL for 'foo'");
 
   waitForExplicitFinish();
--- a/browser/extensions/pocket/content/panels/js/saved.js
+++ b/browser/extensions/pocket/content/panels/js/saved.js
@@ -1,13 +1,13 @@
 /*
 PKT_SAVED_OVERLAY is the view itself and contains all of the methods to manipute the overlay and messaging.
 It does not contain any logic for saving or communication with the extension or server.
 */
-var PKT_SAVED_OVERLAY = function (options) 
+var PKT_SAVED_OVERLAY = function (options)
 {
     var myself = this;
     this.inited = false;
     this.active = false;
     this.wrapper = null;
     this.pockethost = "getpocket.com";
     this.savedItemId = 0;
     this.savedUrl = '';
@@ -44,36 +44,36 @@ var PKT_SAVED_OVERLAY = function (option
             if (typeof resp == 'object' && typeof resp.tags == 'object')
             {
                 myself.userTags = resp.tags;
             }
         });
     };
     this.fillSuggestedTags = function()
     {
-        if (!$('.pkt_ext_suggestedtag_detail').length) 
+        if (!$('.pkt_ext_suggestedtag_detail').length)
         {
             myself.suggestedTagsLoaded = true;
             myself.startCloseTimer();
             return;
         }
 
         thePKT_SAVED.sendMessage("getSuggestedTags",
         {
             url: myself.savedUrl
-        }, function(resp) 
+        }, function(resp)
         {
             $('.pkt_ext_suggestedtag_detail').removeClass('pkt_ext_suggestedtag_detail_loading');
-            if (resp.status == 'success') 
+            if (resp.status == 'success')
             {
                 var newtags = [];
                 for (var i = 0; i < resp.value.suggestedTags.length; i++)
                 {
                     newtags.push(resp.value.suggestedTags[i].tag);
-                }                        
+                }
                 myself.suggestedTagsLoaded = true;
                 if (!myself.mouseInside) {
                     myself.startCloseTimer();
                 }
                 myself.fillTagContainer(newtags,$('.pkt_ext_suggestedtag_detail ul'),'token_suggestedtag');
             }
             else if (resp.status == 'error') {
                 var msg = $('<p class="suggestedtag_msg">');
@@ -94,35 +94,35 @@ var PKT_SAVED_OVERLAY = function (option
         this.wrapper.on('mouseleave',function() {
             myself.mouseInside = false;
             myself.startCloseTimer();
         });
         this.wrapper.on('click',function(e) {
             myself.closeValid = false;
         });
     };
-    this.startCloseTimer = function(manualtime) 
+    this.startCloseTimer = function(manualtime)
     {
         var settime = manualtime ? manualtime : myself.autocloseTiming;
-        if (typeof myself.autocloseTimer == 'number') 
+        if (typeof myself.autocloseTimer == 'number')
         {
             clearTimeout(myself.autocloseTimer);
         }
-        myself.autocloseTimer = setTimeout(function() 
+        myself.autocloseTimer = setTimeout(function()
         {
-            if (myself.closeValid || myself.preventCloseTimerCancel) 
+            if (myself.closeValid || myself.preventCloseTimerCancel)
             {
                 myself.preventCloseTimerCancel = false;
                 myself.closePopup();
             }
         }, settime);
     };
-    this.stopCloseTimer = function() 
+    this.stopCloseTimer = function()
     {
-        if (myself.preventCloseTimerCancel) 
+        if (myself.preventCloseTimerCancel)
         {
             return;
         }
         clearTimeout(myself.autocloseTimer);
     };
     this.closePopup = function() {
         myself.stopCloseTimer();
         thePKT_SAVED.sendMessage("close");
@@ -178,17 +178,17 @@ var PKT_SAVED_OVERLAY = function (option
                 var returnlist = [];
                 if (term.length) {
                     var limit = 15;
                     var r = new RegExp('^' + term);
                     for (var i = 0; i < myself.userTags.length; i++) {
                         if (r.test(myself.userTags[i]) && limit > 0) {
                             returnlist.push({name:myself.userTags[i]});
                             limit--;
-                        }   
+                        }
                     }
                 }
                 if (!$('.token-input-dropdown-tag').data('init')) {
                     $('.token-input-dropdown-tag').css('width',inputwrapper.outerWidth()).data('init');
                     inputwrapper.append($('.token-input-dropdown-tag'));
                 }
                 cb(returnlist);
             },
@@ -201,17 +201,17 @@ var PKT_SAVED_OVERLAY = function (option
                             $('.token-input-input-token input').val(text).focus();
                         },10);
                     }
                     return null;
                 }
                 else {
                     myself.hideTagsError();
                     return {name:myself.sanitizeText(text.toLowerCase())};
-                }                       
+                }
             },
             onReady: function() {
                 $('.token-input-dropdown').addClass('token-input-dropdown-tag');
                 inputwrapper.find('.token-input-input-token input').attr('placeholder',$('.tag-input').attr('placeholder')).css('width','200px');
                 if ($('.pkt_ext_suggestedtag_detail').length) {
                     myself.wrapper.find('.pkt_ext_suggestedtag_detail').on('click','.token_tag',function(e) {
                         e.preventDefault();
                         var tag = $(e.target);
@@ -312,21 +312,21 @@ var PKT_SAVED_OVERLAY = function (option
             });
 
             thePKT_SAVED.sendMessage("addTags",
             {
                 url: myself.savedUrl,
                 tags: originaltags
             }, function(resp)
             {
-                if (resp.status == 'success') 
+                if (resp.status == 'success')
                 {
                     myself.showStateFinalMsg(myself.dictJSON.tagssaved);
                 }
-                else if (resp.status == 'error') 
+                else if (resp.status == 'error')
                 {
                     $('.pkt_ext_edit_msg').addClass('pkt_ext_edit_msg_error pkt_ext_edit_msg_active').text(resp.error.message);
                 }
             });
         });
     };
     this.initRemovePageInput = function() {
         $('.pkt_ext_removeitem').click(function(e) {
@@ -376,17 +376,17 @@ var PKT_SAVED_OVERLAY = function (option
     this.showActiveTags = function() {
         if (!$('.pkt_ext_suggestedtag_detail').length) {
             return;
         }
         var activetokenstext = '|';
         $('.token-input-token').each(function(index, element) {
             activetokenstext += $(element).find('p').text() + '|';
         });
-        
+
         var inactivetags = $('.pkt_ext_suggestedtag_detail').find('.token_tag_inactive');
         inactivetags.each(function(index,element) {
             if (activetokenstext.indexOf('|' + $(element).text() + '|') == -1) {
                 $(element).removeClass('token_tag_inactive');
             }
         });
     };
     this.hideInactiveTags = function() {
@@ -460,17 +460,17 @@ var PKT_SAVED_OVERLAY = function (option
     }
     this.getTranslations = function()
     {
         this.dictJSON = window.pocketStrings;
     };
 };
 
 PKT_SAVED_OVERLAY.prototype = {
-    create : function() 
+    create : function()
     {
         if (this.active)
         {
             return;
         }
         this.active = true;
 
         // set translations
@@ -575,21 +575,21 @@ PKT_SAVED.prototype = {
                     if (resp.error.localizedKey)
                     {
                         myself.overlay.showStateError(myself.overlay.dictJSON.pagenotsaved,myself.overlay.dictJSON[resp.error.localizedKey]);
                     }
                     else
                     {
                         myself.overlay.showStateError(myself.overlay.dictJSON.pagenotsaved,resp.error.message);
                     }
-                }       
+                }
                 else
                 {
                     myself.overlay.showStateError(myself.overlay.dictJSON.pagenotsaved,myself.overlay.dictJSON.errorgeneric);
-                }         
+                }
                 return;
             }
 
             myself.overlay.showStateSaved(resp);
         });
 
     }
 }
--- a/browser/extensions/pocket/content/panels/js/signup.js
+++ b/browser/extensions/pocket/content/panels/js/signup.js
@@ -1,13 +1,13 @@
 /*
 PKT_SIGNUP_OVERLAY is the view itself and contains all of the methods to manipute the overlay and messaging.
 It does not contain any logic for saving or communication with the extension or server.
 */
-var PKT_SIGNUP_OVERLAY = function (options) 
+var PKT_SIGNUP_OVERLAY = function (options)
 {
     var myself = this;
     this.inited = false;
     this.active = false;
     this.delayedStateSaved = false;
     this.wrapper = null;
     this.variant = window.___PKT__SIGNUP_VARIANT;
     this.tagline = window.___PKT__SIGNUP_TAGLINE || '';
@@ -57,17 +57,17 @@ var PKT_SIGNUP_OVERLAY = function (optio
     };
     this.getTranslations = function()
     {
         this.dictJSON = window.pocketStrings;
     };
 };
 
 PKT_SIGNUP_OVERLAY.prototype = {
-    create : function() 
+    create : function()
     {
         var myself = this;
 
         var variant = window.location.href.match(/variant=([\w|\.]*)&?/);
         if (variant && variant.length > 1)
         {
             this.variant = variant[1];
         }
--- a/browser/extensions/pocket/content/pktApi.jsm
+++ b/browser/extensions/pocket/content/pktApi.jsm
@@ -10,20 +10,20 @@
  * SOFTWARE
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
  * in the Software without restriction, including without limitation the rights
  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  * copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- * 
+ *
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
@@ -91,17 +91,17 @@ var pktApi = (function() {
     }
 
     var parseJSON = function(jsonString){
         try {
             var o = JSON.parse(jsonString);
 
             // Handle non-exception-throwing cases:
             // Neither JSON.parse(false) or JSON.parse(1234) throw errors, hence the type-checking,
-            // but... JSON.parse(null) returns 'null', and typeof null === "object", 
+            // but... JSON.parse(null) returns 'null', and typeof null === "object",
             // so we must check for that, too.
             if (o && typeof o === "object" && o !== null) {
                 return o;
             }
         }
         catch (e) { }
 
         return undefined;
@@ -116,34 +116,34 @@ var pktApi = (function() {
      * @param  {string} key A string containing the name of the key you want to
      *                  retrieve the value of
      * @return {string} String containing the value of the key. If the key
      *                  does not exist, null is returned
      */
      function getSetting(key) {
      	// TODO : Move this to sqlite or a local file so it's not editable (and is safer)
      	// https://developer.mozilla.org/en-US/Add-ons/Overlay_Extensions/XUL_School/Local_Storage
-     	
+
 		if (!prefBranch.prefHasUserValue(key))
 			return undefined;
-		
+
 		return prefBranch.getComplexValue(key, Components.interfaces.nsISupportsString).data;
      }
 
      /**
       * Wrapper for different plattforms to set a value for a given key in settings
       * @param {string} key     A string containing the name of the key you want
       *                         to create/update.
       * @param {string} value   String containing the value you want to give
       *                         the key you are creating/updating.
       */
     function setSetting(key, value) {
      	// TODO : Move this to sqlite or a local file so it's not editable (and is safer)
      	// https://developer.mozilla.org/en-US/Add-ons/Overlay_Extensions/XUL_School/Local_Storage
-     	
+
      	if (!value)
      		prefBranch.clearUserPref(key);
      	else
      	{
      		// We use complexValue as tags can have utf-8 characters in them
      		var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
 			str.data = value;
      		prefBranch.setComplexValue(key, Components.interfaces.nsISupportsString, str);
@@ -154,17 +154,17 @@ var pktApi = (function() {
      * Auth
      */
 
     /*
      *  All cookies from the Pocket domain
      *  The return format: { cookieName:cookieValue, cookieName:cookieValue, ... }
     */
     function getCookiesFromPocket() {
-    
+
         var cookieManager = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager2);
         var pocketCookies = cookieManager.getCookiesFromHost(pocketSiteHost);
         var cookies = {};
         while (pocketCookies.hasMoreElements()) {
             var cookie = pocketCookies.getNext().QueryInterface(Ci.nsICookie2);
             cookies[cookie.name] = cookie.value;
         }
         return cookies;
--- a/browser/modules/FormSubmitObserver.jsm
+++ b/browser/modules/FormSubmitObserver.jsm
@@ -37,17 +37,17 @@ FormSubmitObserver.prototype =
   /*
    * Public apis
    */
 
   init: function(aWindow, aTabChildGlobal)
   {
     this._content = aWindow;
     this._tab = aTabChildGlobal;
-    this._mm = 
+    this._mm =
       this._content.QueryInterface(Ci.nsIInterfaceRequestor)
                    .getInterface(Ci.nsIDocShell)
                    .sameTypeRootTreeItem
                    .QueryInterface(Ci.nsIDocShell)
                    .QueryInterface(Ci.nsIInterfaceRequestor)
                    .getInterface(Ci.nsIContentFrameMessageManager);
 
     // nsIFormSubmitObserver callback about invalid forms. See HTMLFormElement
@@ -98,17 +98,17 @@ FormSubmitObserver.prototype =
   notifyInvalidSubmit : function (aFormElement, aInvalidElements)
   {
     // We are going to handle invalid form submission attempt by focusing the
     // first invalid element and show the corresponding validation message in a
     // panel attached to the element.
     if (!aInvalidElements.length) {
       return;
     }
-    
+
     // Insure that this is the FormSubmitObserver associated with the form
     // element / window this notification is about.
     if (this._content != aFormElement.ownerDocument.defaultView.top.document.defaultView) {
       return;
     }
 
     let element = aInvalidElements.queryElementAt(0, Ci.nsISupports);
     if (!(element instanceof HTMLInputElement ||
@@ -137,17 +137,17 @@ FormSubmitObserver.prototype =
     element.addEventListener("blur", this, false);
 
     this._showPopup(element);
   },
 
   /*
    * Internal
    */
-  
+
   /*
    * Handles input changes on the form element we've associated a popup
    * with. Updates the validation message or closes the popup if form data
    * becomes valid.
    */
   _onInput: function (aEvent) {
     let element = aEvent.originalTarget;
 
--- a/browser/modules/WindowsJumpLists.jsm
+++ b/browser/modules/WindowsJumpLists.jsm
@@ -141,26 +141,26 @@ var tasksCfg = [
 this.WinTaskbarJumpList =
 {
   _builder: null,
   _tasks: null,
   _shuttingDown: false,
 
   /**
    * Startup, shutdown, and update
-   */ 
+   */
 
   startup: function WTBJL_startup() {
     // exit if this isn't win7 or higher.
     if (!this._initTaskbar())
       return;
 
     // Win shell shortcut maintenance. If we've gone through an update,
     // this will update any pinned taskbar shortcuts. Not specific to
-    // jump lists, but this was a convienent place to call it. 
+    // jump lists, but this was a convienent place to call it.
     try {
       // dev builds may not have helper.exe, ignore failures.
       this._shortcutMaintenance();
     } catch (ex) {
     }
 
     // Store our task list config data
     this._tasks = tasksCfg;
@@ -248,23 +248,23 @@ this.WinTaskbarJumpList =
     if (this._showRecent)
       this._buildRecent();
 
     this._commitBuild();
   },
 
   /**
    * Taskbar api wrappers
-   */ 
+   */
 
   _startBuild: function WTBJL__startBuild() {
     var removedItems = Cc["@mozilla.org/array;1"].
                        createInstance(Ci.nsIMutableArray);
     this._builder.abortListBuild();
-    if (this._builder.initListBuild(removedItems)) { 
+    if (this._builder.initListBuild(removedItems)) {
       // Prior to building, delete removed items from history.
       this._clearHistory(removedItems);
       return true;
     }
     return false;
   },
 
   _commitBuild: function WTBJL__commitBuild() {
@@ -278,17 +278,17 @@ this.WinTaskbarJumpList =
                 createInstance(Ci.nsIMutableArray);
     this._tasks.forEach(function (task) {
       if ((this._shuttingDown && !task.close) || (!this._shuttingDown && !task.open))
         return;
       var item = this._getHandlerAppItem(task.title, task.description,
                                          task.args, task.iconIndex, null);
       items.appendElement(item, false);
     }, this);
-    
+
     if (items.length > 0)
       this._builder.addListToBuild(this._builder.JUMPLIST_CATEGORY_TASKS, items);
   },
 
   _buildCustom: function WTBJL__buildCustom(title, items) {
     if (items.length > 0)
       this._builder.addListToBuild(this._builder.JUMPLIST_CATEGORY_CUSTOMLIST, items, title);
   },
@@ -319,17 +319,17 @@ this.WinTaskbarJumpList =
           // The are no more results, build the list.
           this._buildCustom(_getString("taskbar.frequent.label"), items);
           this._commitBuild();
           return;
         }
 
         let title = aResult.title || aResult.uri;
         let faviconPageUri = Services.io.newURI(aResult.uri, null, null);
-        let shortcut = this._getHandlerAppItem(title, title, aResult.uri, 1, 
+        let shortcut = this._getHandlerAppItem(title, title, aResult.uri, 1,
                                                faviconPageUri);
         items.appendElement(shortcut, false);
         this._frequentHashList.push(aResult.uri);
       },
       this
     );
   },
 
@@ -381,18 +381,18 @@ this.WinTaskbarJumpList =
   _deleteActiveJumpList: function WTBJL__deleteAJL() {
     this._builder.deleteActiveList();
   },
 
   /**
    * Jump list item creation helpers
    */
 
-  _getHandlerAppItem: function WTBJL__getHandlerAppItem(name, description, 
-                                                        args, iconIndex, 
+  _getHandlerAppItem: function WTBJL__getHandlerAppItem(name, description,
+                                                        args, iconIndex,
                                                         faviconPageUri) {
     var file = Services.dirsvc.get("XREExeF", Ci.nsILocalFile);
 
     var handlerApp = Cc["@mozilla.org/uriloader/local-handler-app;1"].
                      createInstance(Ci.nsILocalHandlerApp);
     handlerApp.executable = file;
     // handlers default to the leaf name if a name is not specified
     if (name && name.length != 0)
@@ -464,29 +464,29 @@ this.WinTaskbarJumpList =
     }
     if (URIsToRemove.length > 0) {
       PlacesUtils.bhistory.removePages(URIsToRemove, URIsToRemove.length, true);
     }
   },
 
   /**
    * Prefs utilities
-   */ 
+   */
 
   _refreshPrefs: function WTBJL__refreshPrefs() {
     this._enabled = _prefs.getBoolPref(PREF_TASKBAR_ENABLED);
     this._showFrequent = _prefs.getBoolPref(PREF_TASKBAR_FREQUENT);
     this._showRecent = _prefs.getBoolPref(PREF_TASKBAR_RECENT);
     this._showTasks = _prefs.getBoolPref(PREF_TASKBAR_TASKS);
     this._maxItemCount = _prefs.getIntPref(PREF_TASKBAR_ITEMCOUNT);
   },
 
   /**
    * Init and shutdown utilities
-   */ 
+   */
 
   _initTaskbar: function WTBJL__initTaskbar() {
     this._builder = _taskbarService.createJumpListBuilder();
     if (!this._builder || !this._builder.available)
       return false;
 
     return true;
   },
@@ -494,17 +494,17 @@ this.WinTaskbarJumpList =
   _initObs: function WTBJL__initObs() {
     // If the browser is closed while in private browsing mode, the "exit"
     // notification is fired on quit-application-granted.
     // History cleanup can happen at profile-change-teardown.
     Services.obs.addObserver(this, "profile-before-change", false);
     Services.obs.addObserver(this, "browser:purge-session-history", false);
     _prefs.addObserver("", this, false);
   },
- 
+
   _freeObs: function WTBJL__freeObs() {
     Services.obs.removeObserver(this, "profile-before-change");
     Services.obs.removeObserver(this, "browser:purge-session-history");
     _prefs.removeObserver("", this);
   },
 
   _updateTimer: function WTBJL__updateTimer() {
     if (this._enabled && !this._shuttingDown && !this._timer) {
--- a/browser/modules/WindowsPreviewPerTab.jsm
+++ b/browser/modules/WindowsPreviewPerTab.jsm
@@ -26,17 +26,17 @@
  * the taskbar. To reduce the overhead of drawing the tab area, the controller
  * implementation caches the tab's contents in a <canvas> element. If no
  * previews or thumbnails have been requested for some time, the controller will
  * discard its cached tab contents.
  *
  * Screen real estate is limited so when there are too many thumbnails to fit
  * on the screen, the taskbar stops displaying thumbnails and instead displays
  * just the title, icon and close button in a similar fashion to previous
- * versions of the taskbar. If there are still too many previews to fit on the 
+ * versions of the taskbar. If there are still too many previews to fit on the
  * screen, the taskbar resorts to a scroll up and scroll down button pair to let
  * the user scroll through the list of tabs. Since this is undoubtedly
  * inconvenient for users with many tabs, the AeroPeek objects turns off all of
  * the tab previews. This tells the taskbar to revert to one preview per window.
  * If the number of tabs falls below this magic threshold, the preview-per-tab
  * behavior returns. There is no reliable way to determine when the scroll
  * buttons appear on the taskbar, so a magic pref-controlled number determines
  * when this threshold has been crossed.
--- a/browser/modules/offlineAppCache.jsm
+++ b/browser/modules/offlineAppCache.jsm
@@ -1,12 +1,12 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
+
 this.EXPORTED_SYMBOLS = ["OfflineAppCacheHelper"];
 
 Components.utils.import('resource://gre/modules/LoadContextInfo.jsm');
 
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 
 this.OfflineAppCacheHelper = {
--- a/storage/test/unit/test_storage_statement.js
+++ b/storage/test/unit/test_storage_statement.js
@@ -163,17 +163,17 @@ function test_failed_execute()
   do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_READY, stmt.state);
   // Should succeed without needing to reset the statement manually
   stmt.finalize();
 }
 
 function test_bind_undefined()
 {
   var stmt = createStatement("INSERT INTO test (name) VALUES ('foo')");
-  
+
   expectError(Cr.NS_ERROR_ILLEGAL_VALUE,
               () => stmt.bindParameters(undefined));
 
   stmt.finalize();
 }
 
 var tests = [test_parameterCount_none, test_parameterCount_one,
              test_getParameterName, test_getParameterIndex_different,
--- a/toolkit/.eslintrc
+++ b/toolkit/.eslintrc
@@ -132,17 +132,17 @@
 
     // No declaring variables that hide things like arguments
     // "no-shadow-restricted-names": 2,
 
     // No spaces between function name and parentheses
     // "no-spaced-func": 2,
 
     // No trailing whitespace
-    // "no-trailing-spaces": 2,
+    "no-trailing-spaces": 2,
 
     // No using undeclared variables
     // "no-undef": 2,
 
     // Error on newline where a semicolon is needed
     // "no-unexpected-multiline": 2,
 
     // No unreachable statements
--- a/toolkit/components/alerts/test/test_alerts.html
+++ b/toolkit/components/alerts/test/test_alerts.html
@@ -47,17 +47,17 @@ function runTest() {
   ok(true, "Alerts service exists in this application");
 
   var notifier;
   try {
     notifier = Cc["@mozilla.org/alerts-service;1"].
                getService(Ci.nsIAlertsService);
     ok(true, "Alerts service is available");
   } catch (ex) {
-    todo(false, 
+    todo(false,
          "Alerts service is not available.", ex);
     return;
   }
 
   try {
     var alertName = "fiorello";
     SimpleTest.waitForExplicitFinish();
     notifier.showAlertNotification(null, "Notification test",
--- a/toolkit/components/apppicker/content/appPicker.js
+++ b/toolkit/components/apppicker/content/appPicker.js
@@ -1,35 +1,35 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 Components.utils.import("resource://gre/modules/AppConstants.jsm");
 
 function AppPicker() {};
 
-AppPicker.prototype = 
+AppPicker.prototype =
 {
     // Class members
     _incomingParams:null,
 
-    /** 
+    /**
     * Init the dialog and populate the application list
-    */ 
+    */
     appPickerLoad: function appPickerLoad() {
         const nsILocalHandlerApp = Components.interfaces.nsILocalHandlerApp;
 
         this._incomingParams = window.arguments[0];
         this._incomingParams.handlerApp = null;
 
         document.title = this._incomingParams.title;
 
-        // Header creation - at the very least, we must have 
+        // Header creation - at the very least, we must have
         // a mime type:
-        //        
+        //
         // (icon) Zip File
         // (icon) filename
         //
         // (icon) Web Feed
         // (icon) mime/type
         //
         // (icon) mime/type
         // (icon)
@@ -39,39 +39,39 @@ AppPicker.prototype =
         if (!filename) {
           filename = mimeInfo.MIMEType;
         }
         var description = this._incomingParams.description;
         if (!description) {
           description = filename;
           filename = "";
         }
-        
+
         // Setup the dialog header information
-        document.getElementById("content-description").setAttribute("value", 
+        document.getElementById("content-description").setAttribute("value",
           description);
         document.getElementById("suggested-filename").setAttribute("value",
           filename);
         document.getElementById("content-icon").setAttribute("src",
           "moz-icon://" + filename + "?size=32&contentType=" +
           mimeInfo.MIMEType);
 
         // Grab a list of nsILocalHandlerApp application helpers to list
         var fileList = mimeInfo.possibleLocalHandlers;
 
         var list = document.getElementById("app-picker-listbox");
 
         var primaryCount = 0;
-        
+
         if (!fileList || fileList.length == 0) {
           // display a message saying nothing is configured
           document.getElementById("app-picker-notfound").removeAttribute("hidden");
           return;
         }
-        
+
         for (var idx = 0; idx < fileList.length; idx++) {
           var file = fileList.queryElementAt(idx, nsILocalHandlerApp);
           try {
               if (!file.executable || !file.executable.isFile())
                 continue;
           } catch (err) {
             continue;
           }
@@ -87,38 +87,38 @@ AppPicker.prototype =
         }
 
         if ( primaryCount == 0 ) {
           // display a message saying nothing is configured
           document.getElementById("app-picker-notfound").removeAttribute("hidden");
         }
     },
 
-    /** 
+    /**
     * Retrieve the moz-icon for the app
-    */ 
+    */
     getFileIconURL: function getFileIconURL(file) {
       var ios = Components.classes["@mozilla.org/network/io-service;1"].
                 getService(Components.interfaces.nsIIOService);
 
       if (!ios) return "";
       const nsIFileProtocolHandler =
         Components.interfaces.nsIFileProtocolHandler;
 
       var fph = ios.getProtocolHandler("file")
                 .QueryInterface(nsIFileProtocolHandler);
       if (!fph) return "";
 
       var urlSpec = fph.getURLSpecFromFile(file);
       return "moz-icon://" + urlSpec + "?size=32";
     },
 
-    /** 
+    /**
     * Retrieve the pretty description from the file
-    */ 
+    */
     getFileDisplayName: function getFileDisplayName(file) {
       if (AppConstants.platform == "win") {
         if (file instanceof Components.interfaces.nsILocalFileWin) {
           try {
             return file.getVersionInfoField("FileDescription");
           } catch (e) {}
         }
       } else if (AppConstants.platform == "macosx") {
@@ -174,32 +174,32 @@ AppPicker.prototype =
     */
     appPickerBrowse: function appPickerBrowse() {
       var nsIFilePicker = Components.interfaces.nsIFilePicker;
       var fp = Components.classes["@mozilla.org/filepicker;1"].
                createInstance(nsIFilePicker);
 
       fp.init(window, this._incomingParams.title, nsIFilePicker.modeOpen);
       fp.appendFilters(nsIFilePicker.filterApps);
-      
+
       var fileLoc = Components.classes["@mozilla.org/file/directory_service;1"]
                             .getService(Components.interfaces.nsIProperties);
       var startLocation;
       if (AppConstants.platform == "win") {
         startLocation = "ProgF"; // Program Files
       } else if (AppConstants.platform == "macosx") {
         startLocation = "LocApp"; // Local Applications
       } else {
         startLocation = "Home";
       }
-      fp.displayDirectory = 
+      fp.displayDirectory =
         fileLoc.get(startLocation, Components.interfaces.nsILocalFile);
-      
+
       if (fp.show() == nsIFilePicker.returnOK && fp.file) {
-          var localHandlerApp = 
+          var localHandlerApp =
             Components.classes["@mozilla.org/uriloader/local-handler-app;1"].
             createInstance(Components.interfaces.nsILocalHandlerApp);
           localHandlerApp.executable = fp.file;
 
           this._incomingParams.handlerApp = localHandlerApp;
           window.close();
       }
       return true;
--- a/toolkit/components/autocomplete/tests/unit/head_autocomplete.js
+++ b/toolkit/components/autocomplete/tests/unit/head_autocomplete.js
@@ -3,163 +3,163 @@
 
 Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
 
 var Cc = Components.classes;
 var Ci = Components.interfaces;
 
 /**
  * Dummy nsIAutoCompleteInput source that returns
- * the given list of AutoCompleteSearch names. 
- * 
+ * the given list of AutoCompleteSearch names.
+ *
  * Implements only the methods needed for this test.
  */
 function AutoCompleteInputBase(aSearches) {
   this.searches = aSearches;
 }
 AutoCompleteInputBase.prototype = {
- 
+
   // Array of AutoCompleteSearch names
   searches: null,
-  
+
   minResultsForPopup: 0,
   timeout: 10,
   searchParam: "",
   textValue: "",
-  disableAutoComplete: false,  
+  disableAutoComplete: false,
   completeDefaultIndex: false,
 
   // Text selection range
   _selStart: 0,
   _selEnd: 0,
   get selectionStart() {
     return this._selStart;
   },
   get selectionEnd() {
     return this._selEnd;
   },
   selectTextRange: function(aStart, aEnd) {
     this._selStart = aStart;
     this._selEnd = aEnd;
   },
-  
+
   get searchCount() {
     return this.searches.length;
   },
-  
+
   getSearchAt: function(aIndex) {
     return this.searches[aIndex];
   },
-  
+
   onSearchBegin: function() {},
   onSearchComplete: function() {},
-  
-  popupOpen: false,  
-  
+
+  popupOpen: false,
+
   get popup() {
     if (!this._popup) {
       this._popup = new AutocompletePopupBase(this);
     }
     return this._popup;
   },
 
   // nsISupports implementation
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIAutoCompleteInput])
 }
 
-/** 
+/**
  * nsIAutoCompleteResult implementation
  */
 function AutoCompleteResultBase(aValues) {
   this._values = aValues;
 }
 AutoCompleteResultBase.prototype = {
-  
+
   // Arrays
   _values: null,
   _comments: [],
   _styles: [],
   _finalCompleteValues: [],
 
   searchString: "",
   searchResult: null,
-  
+
   defaultIndex: -1,
-  
+
   _typeAheadResult: false,
   get typeAheadResult() {
     return this._typeAheadResult;
   },
 
   get matchCount() {
     return this._values.length;
   },
 
   getValueAt: function(aIndex) {
     return this._values[aIndex];
   },
 
   getLabelAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
-  
+
   getCommentAt: function(aIndex) {
     return this._comments[aIndex];
   },
-  
+
   getStyleAt: function(aIndex) {
     return this._styles[aIndex];
   },
-  
+
   getImageAt: function(aIndex) {
     return "";
   },
 
   getFinalCompleteValueAt: function(aIndex) {
     return this._finalCompleteValues[aIndex] || this._values[aIndex];
   },
 
   removeValueAt: function (aRowIndex, aRemoveFromDb) {},
 
   // nsISupports implementation
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIAutoCompleteResult])
 }
 
-/** 
+/**
  * nsIAutoCompleteSearch implementation that always returns
  * the same result set.
  */
 function AutoCompleteSearchBase(aName, aResult) {
   this.name = aName;
   this._result = aResult;
 }
 AutoCompleteSearchBase.prototype = {
-  
+
   // Search name. Used by AutoCompleteController
   name: null,
 
   // AutoCompleteResult
   _result: null,
 
-  startSearch: function(aSearchString, 
-                        aSearchParam, 
-                        aPreviousResult, 
+  startSearch: function(aSearchString,
+                        aSearchParam,
+                        aPreviousResult,
                         aListener) {
     var result = this._result;
 
     result.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
     aListener.onSearchResult(this, result);
   },
-  
+
   stopSearch: function() {},
 
   // nsISupports implementation
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIFactory,
                                          Ci.nsIAutoCompleteSearch]),
-  
+
   // nsIFactory implementation
   createInstance: function(outer, iid) {
     return this.QueryInterface(iid);
   }
 }
 
 function AutocompletePopupBase(input) {
   this.input = input;
@@ -175,36 +175,36 @@ AutocompletePopupBase.prototype = {
       if (this.selectedIndex < 0) {
         this.selectedIndex = numRows - 1;
       }
     }
   },
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIAutoCompletePopup]),
 };
 
-/** 
+/**
  * Helper to register an AutoCompleteSearch with the given name.
  * Allows the AutoCompleteController to find the search.
  */
 function registerAutoCompleteSearch(aSearch) {
   var name = "@mozilla.org/autocomplete/search;1?name=" + aSearch.name;
   var cid = Cc["@mozilla.org/uuid-generator;1"].
             getService(Ci.nsIUUIDGenerator).
             generateUUID();
 
   var desc = "Test AutoCompleteSearch";
   var componentManager = Components.manager
                                    .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.registerFactory(cid, desc, name, aSearch);
 
   // Keep the id on the object so we can unregister later
-  aSearch.cid = cid; 
+  aSearch.cid = cid;
 }
 
-/** 
- * Helper to unregister an AutoCompleteSearch. 
+/**
+ * Helper to unregister an AutoCompleteSearch.
  */
 function unregisterAutoCompleteSearch(aSearch) {
   var componentManager = Components.manager
-                                   .QueryInterface(Ci.nsIComponentRegistrar);  
+                                   .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.unregisterFactory(aSearch.cid, aSearch);
 }
 
--- a/toolkit/components/autocomplete/tests/unit/test_378079.js
+++ b/toolkit/components/autocomplete/tests/unit/test_378079.js
@@ -8,122 +8,122 @@
  * Unit test for Bug 378079 - AutoComplete returns invalid rows when
  * more than one AutoCompleteSearch is used.
  */
 
 
 
 /**
  * Dummy nsIAutoCompleteInput source that returns
- * the given list of AutoCompleteSearch names. 
- * 
+ * the given list of AutoCompleteSearch names.
+ *
  * Implements only the methods needed for this test.
  */
 function AutoCompleteInput(aSearches) {
   this.searches = aSearches;
 }
 AutoCompleteInput.prototype = {
-  constructor: AutoCompleteInput, 
-  
+  constructor: AutoCompleteInput,
+
   // Array of AutoCompleteSearch names
   searches: null,
-  
+
   minResultsForPopup: 0,
   timeout: 10,
   searchParam: "",
   textValue: "",
-  disableAutoComplete: false,  
+  disableAutoComplete: false,
   completeDefaultIndex: false,
-  
+
   get searchCount() {
     return this.searches.length;
   },
-  
+
   getSearchAt: function(aIndex) {
     return this.searches[aIndex];
   },
-  
+
   onSearchBegin: function() {},
   onSearchComplete: function() {},
-  
-  popupOpen: false,  
-  
-  popup: { 
+
+  popupOpen: false,
+
+  popup: {
     setSelectedIndex: function(aIndex) {},
     invalidate: function() {},
 
     // nsISupports implementation
     QueryInterface: function(iid) {
       if (iid.equals(Ci.nsISupports) ||
           iid.equals(Ci.nsIAutoCompletePopup))
         return this;
 
       throw Components.results.NS_ERROR_NO_INTERFACE;
-    }    
+    }
   },
-    
+
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteInput))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   }
 }
 
 
 
-/** 
+/**
  * nsIAutoCompleteResult implementation
  */
 function AutoCompleteResult(aValues, aComments, aStyles) {
   this._values = aValues;
   this._comments = aComments;
   this._styles = aStyles;
-  
+
   if (this._values.length > 0) {
     this.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
   } else {
     this.searchResult = Ci.nsIAutoCompleteResult.NOMATCH;
   }
 }
 AutoCompleteResult.prototype = {
   constructor: AutoCompleteResult,
-  
+
   // Arrays
   _values: null,
   _comments: null,
   _styles: null,
-  
+
   searchString: "",
   searchResult: null,
-  
+
   defaultIndex: 0,
 
   get matchCount() {
     return this._values.length;
   },
 
   getValueAt: function(aIndex) {
     return this._values[aIndex];
   },
- 
+
   getLabelAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
-  
+
   getCommentAt: function(aIndex) {
     return this._comments[aIndex];
   },
-  
+
   getStyleAt: function(aIndex) {
     return this._styles[aIndex];
   },
-  
+
   getImageAt: function(aIndex) {
     return "";
   },
 
   getFinalCompleteValueAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
 
@@ -131,155 +131,155 @@ AutoCompleteResult.prototype = {
 
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteResult))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
-  }  
+  }
 }
 
 
 
-/** 
+/**
  * nsIAutoCompleteSearch implementation that always returns
  * the same result set.
  */
 function AutoCompleteSearch(aName, aResult) {
   this.name = aName;
   this._result = aResult;
 }
 AutoCompleteSearch.prototype = {
   constructor: AutoCompleteSearch,
-  
+
   // Search name. Used by AutoCompleteController
   name: null,
 
   // AutoCompleteResult
-  _result:null,  
-  
-  
+  _result:null,
+
+
   /**
    * Return the same result set for every search
    */
-  startSearch: function(aSearchString, 
-                        aSearchParam, 
-                        aPreviousResult, 
-                        aListener) 
+  startSearch: function(aSearchString,
+                        aSearchParam,
+                        aPreviousResult,
+                        aListener)
   {
     aListener.onSearchResult(this, this._result);
   },
-  
+
   stopSearch: function() {},
 
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIFactory) ||
         iid.equals(Ci.nsIAutoCompleteSearch))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   },
-  
+
   // nsIFactory implementation
   createInstance: function(outer, iid) {
     return this.QueryInterface(iid);
   }
 }
 
 
 
-/** 
+/**
  * Helper to register an AutoCompleteSearch with the given name.
  * Allows the AutoCompleteController to find the search.
  */
 function registerAutoCompleteSearch(aSearch) {
   var name = "@mozilla.org/autocomplete/search;1?name=" + aSearch.name;
 
   var uuidGenerator = Cc["@mozilla.org/uuid-generator;1"].
                       getService(Ci.nsIUUIDGenerator);
   var cid = uuidGenerator.generateUUID();
 
   var desc = "Test AutoCompleteSearch";
-  
+
   var componentManager = Components.manager
                                    .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.registerFactory(cid, desc, name, aSearch);
 
   // Keep the id on the object so we can unregister later
-  aSearch.cid = cid; 
+  aSearch.cid = cid;
 }
 
 
 
-/** 
- * Helper to unregister an AutoCompleteSearch. 
+/**
+ * Helper to unregister an AutoCompleteSearch.
  */
 function unregisterAutoCompleteSearch(aSearch) {
   var componentManager = Components.manager
-                                   .QueryInterface(Ci.nsIComponentRegistrar);  
+                                   .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.unregisterFactory(aSearch.cid, aSearch);
 }
 
 
 
-/** 
+/**
  * Test AutoComplete with multiple AutoCompleteSearch sources.
  */
 function run_test() {
-  
+
   // Make an AutoCompleteSearch that always returns nothing
-  var emptySearch = new AutoCompleteSearch("test-empty-search", 
+  var emptySearch = new AutoCompleteSearch("test-empty-search",
                              new AutoCompleteResult([], [], []));
-  
+
   // Make an AutoCompleteSearch that returns two values
   var expectedValues = ["test1", "test2"];
   var regularSearch = new AutoCompleteSearch("test-regular-search",
                              new AutoCompleteResult(expectedValues, [], []));
-  
+
   // Register searches so AutoCompleteController can find them
   registerAutoCompleteSearch(emptySearch);
   registerAutoCompleteSearch(regularSearch);
-    
+
   var controller = Components.classes["@mozilla.org/autocomplete/controller;1"].
-                   getService(Components.interfaces.nsIAutoCompleteController);  
-  
+                   getService(Components.interfaces.nsIAutoCompleteController);
+
   // Make an AutoCompleteInput that uses our searches
   // and confirms results on search complete
   var input = new AutoCompleteInput([emptySearch.name, regularSearch.name]);
   var numSearchesStarted = 0;
 
   input.onSearchBegin = function() {
     numSearchesStarted++;
     do_check_eq(numSearchesStarted, 1);
   };
 
   input.onSearchComplete = function() {
 
     do_check_eq(numSearchesStarted, 1);
 
-    do_check_eq(controller.searchStatus, 
+    do_check_eq(controller.searchStatus,
                 Ci.nsIAutoCompleteController.STATUS_COMPLETE_MATCH);
     do_check_eq(controller.matchCount, 2);
 
     // Confirm expected result values
     for (var i = 0; i < expectedValues.length; i++) {
-      do_check_eq(expectedValues[i], controller.getValueAt(i)); 
+      do_check_eq(expectedValues[i], controller.getValueAt(i));
     }
 
     // Unregister searches
     unregisterAutoCompleteSearch(emptySearch);
     unregisterAutoCompleteSearch(regularSearch);
 
     do_test_finished();
   };
 
   controller.input = input;
 
   // Search is asynchronous, so don't let the test finish immediately
   do_test_pending();
-  
+
   controller.startSearch("test");
 }
 
--- a/toolkit/components/autocomplete/tests/unit/test_393191.js
+++ b/toolkit/components/autocomplete/tests/unit/test_393191.js
@@ -7,122 +7,122 @@
 /**
  * Unit test for Bug 393191 - AutoComplete crashes if result is null
  */
 
 
 
 /**
  * Dummy nsIAutoCompleteInput source that returns
- * the given list of AutoCompleteSearch names. 
- * 
+ * the given list of AutoCompleteSearch names.
+ *
  * Implements only the methods needed for this test.
  */
 function AutoCompleteInput(aSearches) {
   this.searches = aSearches;
 }
 AutoCompleteInput.prototype = {
-  constructor: AutoCompleteInput, 
-  
+  constructor: AutoCompleteInput,
+
   // Array of AutoCompleteSearch names
   searches: null,
-  
+
   minResultsForPopup: 0,
   timeout: 10,
   searchParam: "",
   textValue: "",
-  disableAutoComplete: false,  
+  disableAutoComplete: false,
   completeDefaultIndex: false,
-  
+
   get searchCount() {
     return this.searches.length;
   },
-  
+
   getSearchAt: function(aIndex) {
     return this.searches[aIndex];
   },
-  
+
   onSearchBegin: function() {},
   onSearchComplete: function() {},
-  
-  popupOpen: false,  
-  
-  popup: { 
+
+  popupOpen: false,
+
+  popup: {
     setSelectedIndex: function(aIndex) {},
     invalidate: function() {},
 
     // nsISupports implementation
     QueryInterface: function(iid) {
       if (iid.equals(Ci.nsISupports) ||
           iid.equals(Ci.nsIAutoCompletePopup))
         return this;
 
       throw Components.results.NS_ERROR_NO_INTERFACE;
-    }    
+    }
   },
-    
+
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteInput))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   }
 }
 
 
 
-/** 
+/**
  * nsIAutoCompleteResult implementation
  */
 function AutoCompleteResult(aValues, aComments, aStyles) {
   this._values = aValues;
   this._comments = aComments;
   this._styles = aStyles;
-  
+
   if (this._values.length > 0) {
     this.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
   } else {
     this.searchResult = Ci.nsIAutoCompleteResult.NOMATCH;
   }
 }
 AutoCompleteResult.prototype = {
   constructor: AutoCompleteResult,
-  
+
   // Arrays
   _values: null,
   _comments: null,
   _styles: null,
-  
+
   searchString: "",
   searchResult: null,
-  
+
   defaultIndex: 0,
 
   get matchCount() {
     return this._values.length;
   },
 
   getValueAt: function(aIndex) {
     return this._values[aIndex];
   },
 
   getLabelAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
-  
+
   getCommentAt: function(aIndex) {
     return this._comments[aIndex];
   },
-  
+
   getStyleAt: function(aIndex) {
     return this._styles[aIndex];
   },
-  
+
   getImageAt: function(aIndex) {
     return "";
   },
 
   getFinalCompleteValueAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
 
@@ -130,143 +130,143 @@ AutoCompleteResult.prototype = {
 
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteResult))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
-  }  
+  }
 }
 
 
 
-/** 
+/**
  * nsIAutoCompleteSearch implementation that always returns
  * the same result set.
  */
 function AutoCompleteSearch(aName, aResult) {
   this.name = aName;
   this._result = aResult;
 }
 AutoCompleteSearch.prototype = {
   constructor: AutoCompleteSearch,
-  
+
   // Search name. Used by AutoCompleteController
   name: null,
 
   // AutoCompleteResult
   _result: null,
-  
-  
+
+
   /**
    * Return the same result set for every search
    */
-  startSearch: function(aSearchString, 
-                        aSearchParam, 
-                        aPreviousResult, 
-                        aListener) 
+  startSearch: function(aSearchString,
+                        aSearchParam,
+                        aPreviousResult,
+                        aListener)
   {
     aListener.onSearchResult(this, this._result);
   },
-  
+
   stopSearch: function() {},
 
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIFactory) ||
         iid.equals(Ci.nsIAutoCompleteSearch))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   },
-  
+
   // nsIFactory implementation
   createInstance: function(outer, iid) {
     return this.QueryInterface(iid);
   }
 }
 
 
 
-/** 
+/**
  * Helper to register an AutoCompleteSearch with the given name.
  * Allows the AutoCompleteController to find the search.
  */
 function registerAutoCompleteSearch(aSearch) {
   var name = "@mozilla.org/autocomplete/search;1?name=" + aSearch.name;
 
   var uuidGenerator = Cc["@mozilla.org/uuid-generator;1"].
                       getService(Ci.nsIUUIDGenerator);
   var cid = uuidGenerator.generateUUID();
 
   var desc = "Test AutoCompleteSearch";
-  
+
   var componentManager = Components.manager
                                    .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.registerFactory(cid, desc, name, aSearch);
 
   // Keep the id on the object so we can unregister later
-  aSearch.cid = cid; 
+  aSearch.cid = cid;
 }
 
 
 
-/** 
- * Helper to unregister an AutoCompleteSearch. 
+/**
+ * Helper to unregister an AutoCompleteSearch.
  */
 function unregisterAutoCompleteSearch(aSearch) {
   var componentManager = Components.manager
-                                   .QueryInterface(Ci.nsIComponentRegistrar);  
+                                   .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.unregisterFactory(aSearch.cid, aSearch);
 }
 
 
 
-/** 
+/**
  * Test AutoComplete with a search that returns a null result
  */
 function run_test() {
-  
+
   // Make an AutoCompleteSearch that always returns nothing
-  var emptySearch = new AutoCompleteSearch("test-empty-search", 
+  var emptySearch = new AutoCompleteSearch("test-empty-search",
                              new AutoCompleteResult([], [], []));
-  
+
   // Register search so AutoCompleteController can find them
   registerAutoCompleteSearch(emptySearch);
-    
+
   var controller = Components.classes["@mozilla.org/autocomplete/controller;1"].
-                   getService(Components.interfaces.nsIAutoCompleteController);  
-  
+                   getService(Components.interfaces.nsIAutoCompleteController);
+
   // Make an AutoCompleteInput that uses our search
   // and confirms results on search complete
   var input = new AutoCompleteInput([emptySearch.name]);
   var numSearchesStarted = 0;
 
   input.onSearchBegin = function() {
     numSearchesStarted++;
     do_check_eq(numSearchesStarted, 1);
   };
 
   input.onSearchComplete = function() {
 
     do_check_eq(numSearchesStarted, 1);
 
-    do_check_eq(controller.searchStatus, 
+    do_check_eq(controller.searchStatus,
                 Ci.nsIAutoCompleteController.STATUS_COMPLETE_NO_MATCH);
     do_check_eq(controller.matchCount, 0);
 
     // Unregister searches
     unregisterAutoCompleteSearch(emptySearch);
 
     do_test_finished();
   };
 
   controller.input = input;
 
   // Search is asynchronous, so don't let the test finish immediately
   do_test_pending();
-  
+
   controller.startSearch("test");
 }
 
--- a/toolkit/components/autocomplete/tests/unit/test_autocomplete_multiple.js
+++ b/toolkit/components/autocomplete/tests/unit/test_autocomplete_multiple.js
@@ -1,116 +1,116 @@
 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim:set ts=2 sw=2 sts=2 et: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /**
  * Dummy nsIAutoCompleteInput source that returns
- * the given list of AutoCompleteSearch names. 
- * 
+ * the given list of AutoCompleteSearch names.
+ *
  * Implements only the methods needed for this test.
  */
 function AutoCompleteInput(aSearches) {
   this.searches = aSearches;
 }
 AutoCompleteInput.prototype = {
-  constructor: AutoCompleteInput, 
-  
+  constructor: AutoCompleteInput,
+
   // Array of AutoCompleteSearch names
   searches: null,
-  
+
   minResultsForPopup: 0,
   timeout: 10,
   searchParam: "",
   textValue: "",
-  disableAutoComplete: false,  
+  disableAutoComplete: false,
   completeDefaultIndex: false,
-  
+
   get searchCount() {
     return this.searches.length;
   },
-  
+
   getSearchAt: function(aIndex) {
     return this.searches[aIndex];
   },
-  
+
   onSearchBegin: function() {},
   onSearchComplete: function() {},
-  
-  popupOpen: false,  
-  
-  popup: { 
+
+  popupOpen: false,
+
+  popup: {
     setSelectedIndex: function(aIndex) {},
     invalidate: function() {},
 
     // nsISupports implementation
     QueryInterface: function(iid) {
       if (iid.equals(Ci.nsISupports) ||
           iid.equals(Ci.nsIAutoCompletePopup))
         return this;
 
       throw Components.results.NS_ERROR_NO_INTERFACE;
-    }    
+    }
   },
-    
+
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteInput))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   }
 }
 
 
 
-/** 
+/**
  * nsIAutoCompleteResult implementation
  */
 function AutoCompleteResult(aValues, aComments, aStyles) {
   this._values = aValues;
   this._comments = aComments;
   this._styles = aStyles;
 }
 AutoCompleteResult.prototype = {
   constructor: AutoCompleteResult,
-  
+
   // Arrays
   _values: null,
   _comments: null,
   _styles: null,
-  
+
   searchString: "",
   searchResult: null,
-  
+
   defaultIndex: 0,
 
   get matchCount() {
     return this._values.length;
   },
 
   getValueAt: function(aIndex) {
     return this._values[aIndex];
   },
 
   getLabelAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
-  
+
   getCommentAt: function(aIndex) {
     return this._comments[aIndex];
   },
-  
+
   getStyleAt: function(aIndex) {
     return this._styles[aIndex];
   },
-  
+
   getImageAt: function(aIndex) {
     return "";
   },
 
   getFinalCompleteValueAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
 
@@ -118,159 +118,159 @@ AutoCompleteResult.prototype = {
 
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteResult))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
-  }  
+  }
 }
 
 
 
-/** 
+/**
  * nsIAutoCompleteSearch implementation that always returns
  * the same result set.
  */
 function AutoCompleteSearch(aName, aResult) {
   this.name = aName;
   this._result = aResult;
 }
 AutoCompleteSearch.prototype = {
   constructor: AutoCompleteSearch,
-  
+
   // Search name. Used by AutoCompleteController
   name: null,
 
   // AutoCompleteResult
-  _result:null,  
-  
-  
+  _result:null,
+
+
   /**
    * Return the same result set for every search
    */
-  startSearch: function(aSearchString, 
-                        aSearchParam, 
-                        aPreviousResult, 
-                        aListener) 
+  startSearch: function(aSearchString,
+                        aSearchParam,
+                        aPreviousResult,
+                        aListener)
   {
     var result = this._result;
     if (result._values.length > 0) {
       result.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS_ONGOING;
     } else {
       result.searchResult = Ci.nsIAutoCompleteResult.RESULT_NOMATCH_ONGOING;
     }
     aListener.onSearchResult(this, result);
 
     if (result._values.length > 0) {
       result.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
     } else {
       result.searchResult = Ci.nsIAutoCompleteResult.RESULT_NOMATCH;
     }
     aListener.onSearchResult(this, result);
   },
-  
+
   stopSearch: function() {},
 
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIFactory) ||
         iid.equals(Ci.nsIAutoCompleteSearch))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   },
-  
+
   // nsIFactory implementation
   createInstance: function(outer, iid) {
     return this.QueryInterface(iid);
   }
 }
 
 
 
-/** 
+/**
  * Helper to register an AutoCompleteSearch with the given name.
  * Allows the AutoCompleteController to find the search.
  */
 function registerAutoCompleteSearch(aSearch) {
   var name = "@mozilla.org/autocomplete/search;1?name=" + aSearch.name;
 
   var uuidGenerator = Cc["@mozilla.org/uuid-generator;1"].
                       getService(Ci.nsIUUIDGenerator);
   var cid = uuidGenerator.generateUUID();
 
   var desc = "Test AutoCompleteSearch";
-  
+
   var componentManager = Components.manager
                                    .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.registerFactory(cid, desc, name, aSearch);
 
   // Keep the id on the object so we can unregister later
-  aSearch.cid = cid; 
+  aSearch.cid = cid;
 }
 
 
 
-/** 
- * Helper to unregister an AutoCompleteSearch. 
+/**
+ * Helper to unregister an AutoCompleteSearch.
  */
 function unregisterAutoCompleteSearch(aSearch) {
   var componentManager = Components.manager
-                                   .QueryInterface(Ci.nsIComponentRegistrar);  
+                                   .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.unregisterFactory(aSearch.cid, aSearch);
 }
 
 
 
-/** 
+/**
  * Test AutoComplete with multiple AutoCompleteSearch sources.
  */
 function run_test() {
   var expected1 = ["1","2","3"];
   var expected2 = ["a","b","c"];
-  var search1 = new AutoCompleteSearch("search1", 
+  var search1 = new AutoCompleteSearch("search1",
                              new AutoCompleteResult(expected1, [], []));
   var search2 = new AutoCompleteSearch("search2",
                              new AutoCompleteResult(expected2, [], []));
-  
+
   // Register searches so AutoCompleteController can find them
   registerAutoCompleteSearch(search1);
   registerAutoCompleteSearch(search2);
-    
+
   var controller = Components.classes["@mozilla.org/autocomplete/controller;1"].
-                   getService(Components.interfaces.nsIAutoCompleteController);  
-  
+                   getService(Components.interfaces.nsIAutoCompleteController);
+
   // Make an AutoCompleteInput that uses our searches
   // and confirms results on search complete
   var input = new AutoCompleteInput([search1.name, search2.name]);
   var numSearchesStarted = 0;
 
   input.onSearchBegin = function() {
     numSearchesStarted++;
     do_check_eq(numSearchesStarted, 1);
   };
 
   input.onSearchComplete = function() {
 
     do_check_eq(numSearchesStarted, 1);
 
-    do_check_eq(controller.searchStatus, 
+    do_check_eq(controller.searchStatus,
                 Ci.nsIAutoCompleteController.STATUS_COMPLETE_MATCH);
     do_check_eq(controller.matchCount, expected1.length + expected2.length);
 
     // Unregister searches
     unregisterAutoCompleteSearch(search1);
     unregisterAutoCompleteSearch(search2);
 
     do_test_finished();
   };
 
   controller.input = input;
 
   // Search is asynchronous, so don't let the test finish immediately
   do_test_pending();
-  
+
   controller.startSearch("test");
 }
--- a/toolkit/components/autocomplete/tests/unit/test_badDefaultIndex.js
+++ b/toolkit/components/autocomplete/tests/unit/test_badDefaultIndex.js
@@ -37,17 +37,17 @@ add_test(function autocomplete_noMatch_s
 
   // Caret must be at the end for autoFill to happen.
   let strLen = INPUT_STR.length;
   input.selectTextRange(strLen, strLen);
   do_check_eq(input.selectionStart, strLen);
   do_check_eq(input.selectionEnd, strLen);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
+                   getService(Ci.nsIAutoCompleteController);
   controller.input = input;
   controller.startSearch(INPUT_STR);
 
   input.onSearchComplete = function () {
     // Should not try to autoFill to an empty value.
     do_check_eq(input.textValue, "moz");
 
     // Clean up.
@@ -72,17 +72,17 @@ add_test(function autocomplete_defaultIn
 
   // Caret must be at the end for autoFill to happen.
   let strLen = INPUT_STR.length;
   input.selectTextRange(strLen, strLen);
   do_check_eq(input.selectionStart, strLen);
   do_check_eq(input.selectionEnd, strLen);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
+                   getService(Ci.nsIAutoCompleteController);
   controller.input = input;
   controller.startSearch(INPUT_STR);
 
   input.onSearchComplete = function () {
     // Should not try to autoFill to an empty value.
     do_check_eq(input.textValue, "moz");
 
     // Clean up.
--- a/toolkit/components/autocomplete/tests/unit/test_completeDefaultIndex_casing.js
+++ b/toolkit/components/autocomplete/tests/unit/test_completeDefaultIndex_casing.js
@@ -36,18 +36,18 @@ add_test(function test_handleEnter() {
 });
 
 function doSearch(aSearchString, aResultValue, aOnCompleteCallback) {
   let search = new AutoCompleteSearchBase("search",
                                           new AutoCompleteResult([ "mozilla", "toolkit" ], 0));
   registerAutoCompleteSearch(search);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
-  
+                   getService(Ci.nsIAutoCompleteController);
+
   // Make an AutoCompleteInput that uses our searches and confirms results.
   let input = new AutoCompleteInput([ search.name ]);
   input.textValue = aSearchString;
 
   // Caret must be at the end for autofill to happen.
   let strLen = aSearchString.length;
   input.selectTextRange(strLen, strLen);
   controller.input = input;
--- a/toolkit/components/autocomplete/tests/unit/test_finalCompleteValue.js
+++ b/toolkit/components/autocomplete/tests/unit/test_finalCompleteValue.js
@@ -24,18 +24,18 @@ add_test(function test_handleEnter_mouse
 function doSearch(aSearchString, aResultValue, aFinalCompleteValue, aOnCompleteCallback) {
   let search = new AutoCompleteSearchBase(
     "search",
     new AutoCompleteResult([ aResultValue ], [ aFinalCompleteValue ])
   );
   registerAutoCompleteSearch(search);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
-  
+                   getService(Ci.nsIAutoCompleteController);
+
   // Make an AutoCompleteInput that uses our searches and confirms results.
   let input = new AutoCompleteInput([ search.name ]);
   input.textValue = aSearchString;
 
   controller.input = input;
   controller.startSearch(aSearchString);
 
   input.onSearchComplete = function onSearchComplete() {
--- a/toolkit/components/autocomplete/tests/unit/test_finalCompleteValue_forceComplete.js
+++ b/toolkit/components/autocomplete/tests/unit/test_finalCompleteValue_forceComplete.js
@@ -74,18 +74,18 @@ function doSearch(aSearchString, aResult
                   aInputProps, aOnCompleteCallback) {
   let search = new AutoCompleteSearchBase(
     "search",
     new AutoCompleteResult([ aResultValue ], [ aFinalCompleteValue ])
   );
   registerAutoCompleteSearch(search);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
-  
+                   getService(Ci.nsIAutoCompleteController);
+
   // Make an AutoCompleteInput that uses our searches and confirms results.
   let input = new AutoCompleteInput([ search.name ]);
   for (var p in aInputProps) {
     input[p] = aInputProps[p];
   }
   input.textValue = aSearchString;
   // Place the cursor at the end of the input so that completion to
   // default index will kick in.
--- a/toolkit/components/autocomplete/tests/unit/test_finalDefaultCompleteValue.js
+++ b/toolkit/components/autocomplete/tests/unit/test_finalDefaultCompleteValue.js
@@ -39,18 +39,18 @@ add_test(function test_handleEnter() {
 function doSearch(aSearchString, aResultValue, aFinalCompleteValue, aOnCompleteCallback) {
   let search = new AutoCompleteSearchBase(
     "search",
     new AutoCompleteResult([ aResultValue ], [ aFinalCompleteValue ])
   );
   registerAutoCompleteSearch(search);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
-  
+                   getService(Ci.nsIAutoCompleteController);
+
   // Make an AutoCompleteInput that uses our searches and confirms results.
   let input = new AutoCompleteInput([ search.name ]);
   input.textValue = aSearchString;
 
   // Caret must be at the end for autofill to happen.
   let strLen = aSearchString.length;
   input.selectTextRange(strLen, strLen);
   controller.input = input;
--- a/toolkit/components/autocomplete/tests/unit/test_hiddenResult.js
+++ b/toolkit/components/autocomplete/tests/unit/test_hiddenResult.js
@@ -11,51 +11,51 @@ AutoCompleteResult.prototype = Object.cr
 function AutoCompleteTypeAheadResult(aValues) {
   this._values = aValues;
   this.defaultIndex = 0;
   this._typeAheadResult = true;
 }
 AutoCompleteTypeAheadResult.prototype = Object.create(AutoCompleteResultBase.prototype);
 
 
-/** 
+/**
  * Test AutoComplete with multiple AutoCompleteSearch sources, with one of them
  * being hidden from the popup, but can still do typeahead completion.
  */
 function run_test() {
   do_test_pending();
 
   var inputStr = "moz";
 
   // Type ahead result
   var searchTypeAhead = new AutoCompleteSearchBase("search1",
                                                    new AutoCompleteTypeAheadResult(["mozillaTest1"]));
   // Regular result
   var searchNormal = new AutoCompleteSearchBase("search2",
                                                 new AutoCompleteResult(["mozillaTest2"]));
-  
+
   // Register searches so AutoCompleteController can find them
   registerAutoCompleteSearch(searchNormal);
   registerAutoCompleteSearch(searchTypeAhead);
-  
+
   // Make an AutoCompleteInput that uses our searches
   // and confirms results on search complete.
   var input = new AutoCompleteInputBase([searchTypeAhead.name, searchNormal.name]);
   input.completeDefaultIndex = true;
   input.textValue = inputStr;
 
   // Caret must be at the end. Autofill doesn't happen unless you're typing
   // characters at the end.
   var strLen = inputStr.length;
   input.selectTextRange(strLen, strLen);
   do_check_eq(input.selectionStart, strLen);
   do_check_eq(input.selectionEnd, strLen);
 
   var controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
+                   getService(Ci.nsIAutoCompleteController);
 
   controller.input = input;
   controller.startSearch(inputStr);
 
   input.onSearchComplete = function() {
     // Hidden results should still be able to do inline autocomplete
     do_check_eq(input.textValue, "mozillaTest1");
 
--- a/toolkit/components/autocomplete/tests/unit/test_immediate_search.js
+++ b/toolkit/components/autocomplete/tests/unit/test_immediate_search.js
@@ -41,17 +41,17 @@ add_test(function test_immediate_search(
   let immediateSearch = new AutoCompleteImmediateSearch(
     "immediate", new AutoCompleteResult(["moz-immediate"], 0));
   registerAutoCompleteSearch(immediateSearch);
   let delayedSearch = new AutoCompleteDelayedSearch(
     "delayed", new AutoCompleteResult(["moz-delayed"], 0));
   registerAutoCompleteSearch(delayedSearch);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
+                   getService(Ci.nsIAutoCompleteController);
 
   let input = new AutoCompleteInputBase([delayedSearch.name,
                                          immediateSearch.name]);
   input.completeDefaultIndex = true;
   input.textValue = inputStr;
 
   // Caret must be at the end. Autofill doesn't happen unless you're typing
   // characters at the end.
@@ -86,17 +86,17 @@ add_test(function test_immediate_search_
     "immediate", new AutoCompleteResult(["moz-immediate"], 0));
   registerAutoCompleteSearch(immediateSearch);
 
   let delayedSearch = new AutoCompleteDelayedSearch(
     "delayed", new AutoCompleteResult(["moz-delayed"], 0));
   registerAutoCompleteSearch(delayedSearch);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
+                   getService(Ci.nsIAutoCompleteController);
 
   let input = new AutoCompleteInputBase([delayedSearch.name,
                                          immediateSearch.name]);
   input.completeDefaultIndex = true;
   input.textValue = inputStr;
   input.timeout = 0;
 
   // Caret must be at the end. Autofill doesn't happen unless you're typing
@@ -127,17 +127,17 @@ add_test(function test_delayed_search_no
   let immediateResults = ["mozillaTest"];
   let inputStr = "moz";
 
   let delayedSearch = new AutoCompleteDelayedSearch(
     "delayed", new AutoCompleteResult(["moz-delayed"], 0));
   registerAutoCompleteSearch(delayedSearch);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
+                   getService(Ci.nsIAutoCompleteController);
 
   let input = new AutoCompleteInputBase([delayedSearch.name]);
   input.completeDefaultIndex = true;
   input.textValue = inputStr;
   input.timeout = 0;
 
   // Caret must be at the end. Autofill doesn't happen unless you're typing
   // characters at the end.
--- a/toolkit/components/autocomplete/tests/unit/test_previousResult.js
+++ b/toolkit/components/autocomplete/tests/unit/test_previousResult.js
@@ -7,121 +7,121 @@
 /**
  * Unit test for Bug 438861 - Previous search results not returned to multiple
  * searches.
  */
 
 
 /**
  * Dummy nsIAutoCompleteInput source that returns
- * the given list of AutoCompleteSearch names. 
- * 
+ * the given list of AutoCompleteSearch names.
+ *
  * Implements only the methods needed for this test.
  */
 function AutoCompleteInput(aSearches) {
   this.searches = aSearches;
 }
 AutoCompleteInput.prototype = {
-  constructor: AutoCompleteInput, 
-  
+  constructor: AutoCompleteInput,
+
   // Array of AutoCompleteSearch names
   searches: null,
-  
+
   minResultsForPopup: 0,
   timeout: 10,
   searchParam: "",
   textValue: "",
-  disableAutoComplete: false,  
+  disableAutoComplete: false,
   completeDefaultIndex: false,
-  
+
   get searchCount() {
     return this.searches.length;
   },
-  
+
   getSearchAt: function(aIndex) {
     return this.searches[aIndex];
   },
-  
+
   onSearchBegin: function() {},
   onSearchComplete: function() {},
-  
-  popupOpen: false,  
-  
-  popup: { 
+
+  popupOpen: false,
+
+  popup: {
     setSelectedIndex: function(aIndex) {},
     invalidate: function() {},
 
     // nsISupports implementation
     QueryInterface: function(iid) {
       if (iid.equals(Ci.nsISupports) ||
           iid.equals(Ci.nsIAutoCompletePopup))
         return this;
 
       throw Components.results.NS_ERROR_NO_INTERFACE;
-    }    
+    }
   },
-    
+
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteInput))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   }
 }
 
 
 
-/** 
+/**
  * nsIAutoCompleteResult implementation
  */
 function AutoCompleteResult(aValues, aComments, aStyles) {
   this._values = aValues;
   this._comments = aComments;
   this._styles = aStyles;
   if (this._values.length > 0) {
     this.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
   } else {
     this.searchResult = Ci.nsIAutoCompleteResult.NOMATCH;
   }
 }
 AutoCompleteResult.prototype = {
   constructor: AutoCompleteResult,
-  
+
   // Arrays
   _values: null,
   _comments: null,
   _styles: null,
-  
+
   searchString: "",
   searchResult: null,
-  
+
   defaultIndex: 0,
 
   get matchCount() {
     return this._values.length;
   },
 
   getValueAt: function(aIndex) {
     return this._values[aIndex];
   },
 
   getLabelAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
-  
+
   getCommentAt: function(aIndex) {
     return this._comments[aIndex];
   },
-  
+
   getStyleAt: function(aIndex) {
     return this._styles[aIndex];
   },
-  
+
   getImageAt: function(aIndex) {
     return "";
   },
 
   getFinalCompleteValueAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
 
@@ -129,111 +129,111 @@ AutoCompleteResult.prototype = {
 
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteResult))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
-  }  
+  }
 }
 
 
-/** 
+/**
  * nsIAutoCompleteSearch implementation that always returns
  * the same result set.
  */
 function AutoCompleteSearch(aName, aResult) {
   this.name = aName;
   this._result = aResult;
 }
 AutoCompleteSearch.prototype = {
   constructor: AutoCompleteSearch,
-  
+
   // Search name. Used by AutoCompleteController
   name: null,
 
   // AutoCompleteResult
   _result: null,
 
   _previousResult: null,
-  
-  
+
+
   /**
    * Return the same result set for every search
    */
-  startSearch: function(aSearchString, 
-                        aSearchParam, 
-                        aPreviousResult, 
-                        aListener) 
+  startSearch: function(aSearchString,
+                        aSearchParam,
+                        aPreviousResult,
+                        aListener)
   {
     this._previousResult = aPreviousResult;
     aListener.onSearchResult(this, this._result);
   },
-  
+
   stopSearch: function() {},
 
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIFactory) ||
         iid.equals(Ci.nsIAutoCompleteSearch))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   },
-  
+
   // nsIFactory implementation
   createInstance: function(outer, iid) {
     return this.QueryInterface(iid);
   }
 }
 
 
-/** 
+/**
  * Helper to register an AutoCompleteSearch with the given name.
  * Allows the AutoCompleteController to find the search.
  */
 function registerAutoCompleteSearch(aSearch) {
   var name = "@mozilla.org/autocomplete/search;1?name=" + aSearch.name;
 
   var uuidGenerator = Cc["@mozilla.org/uuid-generator;1"].
                       getService(Ci.nsIUUIDGenerator);
   var cid = uuidGenerator.generateUUID();
 
   var desc = "Test AutoCompleteSearch";
-  
+
   var componentManager = Components.manager
                                    .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.registerFactory(cid, desc, name, aSearch);
 
   // Keep the id on the object so we can unregister later
-  aSearch.cid = cid; 
+  aSearch.cid = cid;
 }
 
 
-/** 
- * Helper to unregister an AutoCompleteSearch. 
+/**
+ * Helper to unregister an AutoCompleteSearch.
  */
 function unregisterAutoCompleteSearch(aSearch) {
   var componentManager = Components.manager
-                                   .QueryInterface(Ci.nsIComponentRegistrar);  
+                                   .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.unregisterFactory(aSearch.cid, aSearch);
 }
 
 
-/** 
+/**
  */
 function run_test() {
   // Make an AutoCompleteSearch that always returns nothing
   var search1 = new AutoCompleteSearch("test-previous-result1",
     new AutoCompleteResult(["hello1"], [""], [""]));
 
-  var search2 = new AutoCompleteSearch("test-previous-result2", 
+  var search2 = new AutoCompleteSearch("test-previous-result2",
     new AutoCompleteResult(["hello2"], [""], [""]));
 
   // Register search so AutoCompleteController can find them
   registerAutoCompleteSearch(search1);
   registerAutoCompleteSearch(search2);
 
   var controller = Components.classes["@mozilla.org/autocomplete/controller;1"].
                    getService(Components.interfaces.nsIAutoCompleteController);
@@ -245,17 +245,17 @@ function run_test() {
   var numSearchesStarted = 0;
   var previousResult = null;
 
   input.onSearchBegin = function() {
     numSearchesStarted++;
   };
 
   input.onSearchComplete = function() {
-    do_check_eq(controller.searchStatus, 
+    do_check_eq(controller.searchStatus,
                 Ci.nsIAutoCompleteController.STATUS_COMPLETE_MATCH);
     do_check_eq(controller.matchCount, 2);
 
     if (numSearchesStarted == 1) {
       do_check_eq(search1._previousResult, null);
       do_check_eq(search2._previousResult, null);
 
       // Now start it again
@@ -273,12 +273,12 @@ function run_test() {
 
     do_test_finished();
   };
 
   controller.input = input;
 
   // Search is asynchronous, so don't let the test finish immediately
   do_test_pending();
-  
+
   controller.startSearch("test");
 }
 
--- a/toolkit/components/autocomplete/tests/unit/test_stopSearch.js
+++ b/toolkit/components/autocomplete/tests/unit/test_stopSearch.js
@@ -22,17 +22,17 @@ function AutoCompleteInput(aSearches)
   this.searches = aSearches;
 }
 AutoCompleteInput.prototype = {
   constructor: AutoCompleteInput,
   minResultsForPopup: 0,
   timeout: 10,
   searchParam: "",
   textValue: "hello",
-  disableAutoComplete: false, 
+  disableAutoComplete: false,
   completeDefaultIndex: false,
   set popupOpen(val) { return val; }, // ignore
   get popupOpen() { return false; },
   get searchCount() { return this.searches.length; },
   getSearchAt: function(aIndex) { return this.searches[aIndex]; },
   onSearchBegin: function() {},
   onSearchComplete: function() {},
   onTextReverted: function () {},
@@ -74,41 +74,41 @@ AutoCompleteSearch.prototype = {
   ]),
   createInstance: function(outer, iid)
   {
     return this.QueryInterface(iid);
   }
 }
 
 
-/** 
+/**
  * Helper to register an AutoCompleteSearch with the given name.
  * Allows the AutoCompleteController to find the search.
  */
 function registerAutoCompleteSearch(aSearch)
 {
   let name = "@mozilla.org/autocomplete/search;1?name=" + aSearch.name;
   let uuidGenerator = Cc["@mozilla.org/uuid-generator;1"].
                       getService(Ci.nsIUUIDGenerator);
   let cid = uuidGenerator.generateUUID();
   let desc = "Test AutoCompleteSearch";
   let componentManager = Components.manager
                                    .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.registerFactory(cid, desc, name, aSearch);
   // Keep the id on the object so we can unregister later
-  aSearch.cid = cid; 
+  aSearch.cid = cid;
 }
 
 
-/** 
- * Helper to unregister an AutoCompleteSearch. 
+/**
+ * Helper to unregister an AutoCompleteSearch.
  */
 function unregisterAutoCompleteSearch(aSearch) {
   let componentManager = Components.manager
-                                   .QueryInterface(Ci.nsIComponentRegistrar);  
+                                   .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.unregisterFactory(aSearch.cid, aSearch);
 }
 
 
 var gTests = [
   function(controller) {
     print("handleText");
     controller.input.textValue = "hel";
--- a/toolkit/components/commandlines/test/unit/test_bug666224.js
+++ b/toolkit/components/commandlines/test/unit/test_bug666224.js
@@ -1,6 +1,6 @@
 function run_test() {
     var cmdLine=Components.classes["@mozilla.org/toolkit/command-line;1"].createInstance(Components.interfaces.nsICommandLine);
     try {
         cmdLine.getArgument(cmdLine.length);
-    } catch(e) {} 
+    } catch(e) {}
 }
--- a/toolkit/components/console/content/console.js
+++ b/toolkit/components/console/content/console.js
@@ -13,17 +13,17 @@ var gFilter;
 
 window.onload = function()
 {
   gConsole = document.getElementById("ConsoleBox");
   gConsoleBundle = document.getElementById("ConsoleBundle");
   gTextBoxEval = document.getElementById("TextboxEval");
   gEvaluator = document.getElementById("Evaluator");
   gFilter = document.getElementById("Filter");
-  
+
   updateSortCommand(gConsole.sortOrder);
   updateModeCommand(gConsole.mode);
 
   gEvaluator.addEventListener("load", loadOrDisplayResult, true);
 }
 
 /* :::::::: Console UI Functions ::::::::::::::: */
 
@@ -40,17 +40,17 @@ function changeMode(aMode)
     case "Errors":
     case "Warnings":
     case "Messages":
       gConsole.mode = aMode;
       break;
     case "All":
       gConsole.mode = null;
   }
-  
+
   document.persist("ConsoleBox", "mode");
 }
 
 function clearConsole()
 {
   gConsole.clear();
 }
 
@@ -58,17 +58,17 @@ function changeSortOrder(aOrder)
 {
   updateSortCommand(gConsole.sortOrder = aOrder);
 }
 
 function updateSortCommand(aOrder)
 {
   var orderString = aOrder == 'reverse' ? "Descend" : "Ascend";
   var bc = document.getElementById("Console:sort"+orderString);
-  bc.setAttribute("checked", true);  
+  bc.setAttribute("checked", true);
 
   orderString = aOrder == 'reverse' ? "Ascend" : "Descend";
   bc = document.getElementById("Console:sort"+orderString);
   bc.setAttribute("checked", false);
 }
 
 function updateModeCommand(aMode)
 {
--- a/toolkit/components/console/content/consoleBindings.xml
+++ b/toolkit/components/console/content/consoleBindings.xml
@@ -7,17 +7,17 @@
 <!DOCTYPE bindings SYSTEM "chrome://global/locale/console.dtd">
 
 <bindings id="consoleBindings"
           xmlns="http://www.mozilla.org/xbl"
           xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
           xmlns:xbl="http://www.mozilla.org/xbl">
 
   <binding id="console-box" extends="xul:box">
-    <content>  
+    <content>
       <xul:stringbundle src="chrome://global/locale/console.properties" role="string-bundle"/>
       <xul:vbox class="console-box-internal">
         <xul:vbox class="console-rows" role="console-rows" xbl:inherits="dir=sortOrder"/>
       </xul:vbox>
     </content>
 
     <implementation>
       <field name="limit" readonly="true">
@@ -84,17 +84,17 @@
         ]]></setter>
       </property>
 
       <method name="init">
         <body><![CDATA[
           this.mCount = 0;
 
           this.mConsoleListener = {
-            console: this, 
+            console: this,
             observe : function(aObject) {
               // The message can arrive a little bit after the xbl binding has been
               // unbind. So node.appendItem will not be available anymore.
               if ('appendItem' in this.console)
                 this.console.appendItem(aObject);
             }
           };
 
@@ -355,17 +355,17 @@
             aRow.classList.remove("filtered-by-string")
           } else {
             aRow.classList.add("filtered-by-string")
           }
         ]]></body>
       </method>
 
       <!-- UTILITY FUNCTIONS -->
-      
+
       <method name="repeatChar">
         <parameter name="aChar"/>
         <parameter name="aCol"/>
         <body><![CDATA[
           if (--aCol <= 0)
             return "";
 
           for (var i = 2; i < aCol; i += i)
@@ -385,19 +385,19 @@
 
           let searchStr = aString.toLowerCase();
           let filterStrings = aFilter.split(/\s+/);
           return !filterStrings.some(function (f) {
             return searchStr.indexOf(f) == -1;
           });
         ]]></body>
       </method>
-          
-      <constructor> this.init(); </constructor>
-      <destructor> this.destroy(); </destructor>
+
+      <constructor>this.init();</constructor>
+      <destructor>this.destroy();</destructor>
 
       <!-- Command controller for the copy command -->
       <field name="_controller"><![CDATA[({
         _outer: this,
 
         QueryInterface: function(aIID) {
           if (aIID.equals(Components.interfaces.nsIController) ||
               aIID.equals(Components.interfaces.nsISupports))
--- a/toolkit/components/contentprefs/tests/unit/head_contentPrefs.js
+++ b/toolkit/components/contentprefs/tests/unit/head_contentPrefs.js
@@ -41,17 +41,17 @@ var ContentPrefTest = {
       this.__ioSvc = Cc["@mozilla.org/network/io-service;1"].
                      getService(Ci.nsIIOService);
     return this.__ioSvc;
   },
 
 
   //**************************************************************************//
   // nsISupports
-  
+
   interfaces: [Ci.nsIDirectoryServiceProvider, Ci.nsISupports],
 
   QueryInterface: function ContentPrefTest_QueryInterface(iid) {
     if (!this.interfaces.some( function(v) { return iid.equals(v) } ))
       throw Cr.NS_ERROR_NO_INTERFACE;
     return this;
   },
 
--- a/toolkit/components/contentprefs/tests/unit/test_bug503971.js
+++ b/toolkit/components/contentprefs/tests/unit/test_bug503971.js
@@ -1,17 +1,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 function run_test() {
   var cps = new ContentPrefInstance(null);
 
   var uri = ContentPrefTest.getURI("http://www.example.com/");
-  
+
   do_check_thrown(function () { cps.setPref(uri, null, 8); });
   do_check_thrown(function () { cps.hasPref(uri, null); });
   do_check_thrown(function () { cps.getPref(uri, null); });
   do_check_thrown(function () { cps.removePref(uri, null); });
   do_check_thrown(function () { cps.getPrefsByName(null); });
   do_check_thrown(function () { cps.removePrefsByName(null); });
 
   do_check_thrown(function () { cps.setPref(uri, "", 21); });
--- a/toolkit/components/contentprefs/tests/unit/test_bug679784.js
+++ b/toolkit/components/contentprefs/tests/unit/test_bug679784.js
@@ -46,17 +46,17 @@ function run_test() {
   do_check_eq(cps.getPref(null, "value-global"), "foo-private-browsing-global");
   do_check_eq(prefObserver.setCalledNum, num + 1);
 
   // test removePref
   num = prefObserver.removedCalledNum;
   cps.removePref(uri, "value");
   do_check_eq(cps.hasPref(uri, "value"), true);
   // fallback to non private mode value
-  do_check_eq(cps.getPref(uri, "value"), "foo"); 
+  do_check_eq(cps.getPref(uri, "value"), "foo");
   do_check_eq(prefObserver.removedCalledNum, num + 1);
 
   num = prefObserver.removedCalledNum;
   cps.removePref(null, "value-global");
   do_check_eq(cps.hasPref(null, "value-global"), true);
   // fallback to non private mode value
   do_check_eq(cps.getPref(null, "value-global"), "foo-global") ;
   do_check_eq(prefObserver.removedCalledNum, num + 1);
--- a/toolkit/components/contentprefs/tests/unit/test_unusedGroupsAndSettings.js
+++ b/toolkit/components/contentprefs/tests/unit/test_unusedGroupsAndSettings.js
@@ -1,34 +1,34 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 var cps = new ContentPrefInstance(null);
-          
+
 function run_test() {
   var uri1 = ContentPrefTest.getURI("http://www.domain1.com/");
   var uri2 = ContentPrefTest.getURI("http://foo.domain1.com/");
   var uri3 = ContentPrefTest.getURI("http://domain1.com/");
   var uri4 = ContentPrefTest.getURI("http://www.domain2.com/");
 
   cps.setPref(uri1, "one", 1);
   cps.setPref(uri1, "two", 2);
   cps.setPref(uri2, "one", 4);
   cps.setPref(uri3, "three", 8);
   cps.setPref(uri4, "two", 16);
-  
+
   cps.removePref(uri3, "three"); // uri3 should be removed now
   checkForUnusedGroups();
   checkForUnusedSettings();
 
   cps.removePrefsByName("two"); // uri4 should be removed now
   checkForUnusedGroups();
   checkForUnusedSettings();
-  
+
   cps.removeGroupedPrefs();
   checkForUnusedGroups();
   checkForUnusedSettings();
 }
 
 function checkForUnusedGroups() {
   var stmt = cps.DBConnection.createStatement(`
                SELECT COUNT(*) AS count FROM groups
--- a/toolkit/components/cookie/content/cookieAcceptDialog.js
+++ b/toolkit/components/cookie/content/cookieAcceptDialog.js
@@ -6,17 +6,17 @@
 
 const nsICookieAcceptDialog = Components.interfaces.nsICookieAcceptDialog;
 const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
 const nsICookie = Components.interfaces.nsICookie;
 const nsICookiePromptService = Components.interfaces.nsICookiePromptService;
 
 Components.utils.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
 
-var params; 
+var params;
 var cookieBundle;
 var gDateService = null;
 
 var showDetails = "";
 var hideDetails = "";
 var detailsAccessKey = "";
 
 function onload()
@@ -151,17 +151,17 @@ function showhideinfo()
     document.getElementById('disclosureButton').setAttribute("label",showDetails);
   }
   sizeToContent();
 }
 
 function cookieAcceptNormal()
 {
   // accept the cookie normally
-  params.SetInt(nsICookieAcceptDialog.ACCEPT_COOKIE, nsICookiePromptService.ACCEPT_COOKIE); 
+  params.SetInt(nsICookieAcceptDialog.ACCEPT_COOKIE, nsICookiePromptService.ACCEPT_COOKIE);
   // And remember that when needed
   params.SetInt(nsICookieAcceptDialog.REMEMBER_DECISION, document.getElementById('persistDomainAcceptance').checked);
   window.close();
 }
 
 function cookieAcceptSession()
 {
   // accept for the session only
@@ -169,34 +169,34 @@ function cookieAcceptSession()
   // And remember that when needed
   params.SetInt(nsICookieAcceptDialog.REMEMBER_DECISION, document.getElementById('persistDomainAcceptance').checked);
   window.close();
 }
 
 function cookieDeny()
 {
   // say that the cookie was rejected
-  params.SetInt(nsICookieAcceptDialog.ACCEPT_COOKIE, nsICookiePromptService.DENY_COOKIE); 
+  params.SetInt(nsICookieAcceptDialog.ACCEPT_COOKIE, nsICookiePromptService.DENY_COOKIE);
   // And remember that when needed
   params.SetInt(nsICookieAcceptDialog.REMEMBER_DECISION, document.getElementById('persistDomainAcceptance').checked);
   window.close();
 }
 
 function GetExpiresString(secondsUntilExpires) {
   if (secondsUntilExpires) {
     var date = new Date(1000*secondsUntilExpires);
 
     // if a server manages to set a really long-lived cookie, the dateservice
     // can't cope with it properly, so we'll just return a blank string
     // see bug 238045 for details
     var expiry = "";
     try {
       expiry = gDateService.FormatDateTime("", gDateService.dateFormatLong,
-                                           gDateService.timeFormatSeconds, 
-                                           date.getFullYear(), date.getMonth()+1, 
+                                           gDateService.timeFormatSeconds,
+                                           date.getFullYear(), date.getMonth()+1,
                                            date.getDate(), date.getHours(),
                                            date.getMinutes(), date.getSeconds());
     } catch(ex) {
       // do nothing
     }
     return expiry;
   }
   return cookieBundle.getString("expireAtEndOfSession");
--- a/toolkit/components/crashes/CrashManager.jsm
+++ b/toolkit/components/crashes/CrashManager.jsm
@@ -821,17 +821,17 @@ CrashStore.prototype = Object.freeze({
 
           this._data.crashes.set(id, denormalized);
 
           let key = dateToDays(denormalized.crashDate) + "-" + denormalized.type;
           actualCounts.set(key, (actualCounts.get(key) || 0) + 1);
 
           // If we have an OOM size, count the crash as an OOM in addition to
           // being a main process crash.
-          if (denormalized.metadata && 
+          if (denormalized.metadata &&
               denormalized.metadata.OOMAllocationSize) {
             let oomKey = key + "-oom";
             actualCounts.set(oomKey, (actualCounts.get(oomKey) || 0) + 1);
           }
 
         }
 
         // The validation in this loop is arguably not necessary. We perform
--- a/toolkit/components/downloads/nsDownloadManagerUI.js
+++ b/toolkit/components/downloads/nsDownloadManagerUI.js
@@ -28,17 +28,17 @@ nsDownloadManagerUI.prototype = {
   {
     if (!aReason)
       aReason = Ci.nsIDownloadManagerUI.REASON_USER_INTERACTED;
 
     // First we see if it is already visible
     let window = this.recentWindow;
     if (window) {
       window.focus();
-      
+
       // If we are being asked to show again, with a user interaction reason,
       // set the appropriate variable.
       if (aReason == Ci.nsIDownloadManagerUI.REASON_USER_INTERACTED)
         window.gUserInteracted = true;
       return;
     }
 
     let parent = null;
--- a/toolkit/components/downloads/test/browser/browser_bug414214.js
+++ b/toolkit/components/downloads/test/browser/browser_bug414214.js
@@ -44,16 +44,16 @@ function test()
     // Reset the pref to its default value
     try {
       Services.prefs.clearUserPref(PREF_BDM_CLOSEWHENDONE);
     }
     catch (err) { }
 
     finish();
   }
-  
+
   // OK, let's pull up the UI
   // Linux uses y, everything else is j
   var key = navigator.platform.match("Linux") ? "y" : "j";
   EventUtils.synthesizeKey(key, {metaKey: true}, window.opener);
 
   waitForExplicitFinish();
 }
--- a/toolkit/components/downloads/test/browser/browser_nsIDownloadManagerUI.js
+++ b/toolkit/components/downloads/test/browser/browser_nsIDownloadManagerUI.js
@@ -95,12 +95,12 @@ function test()
     var win = Services.wm.getMostRecentWindow("Download:Manager");
 
     // Now we can run our tests
     for (var t of testFuncs)
       t(win);
 
     finish();
   }
-  
+
   waitForExplicitFinish();
   window.setTimeout(finishUp, 1000);
 }
--- a/toolkit/components/downloads/test/unit/test_download_samename.js
+++ b/toolkit/components/downloads/test/unit/test_download_samename.js
@@ -31,17 +31,17 @@ var DownloadListener = {
   prevFiles : [],
 
   init: function () {
     Services.obs.addObserver(this, "dl-start", true);
     Services.obs.addObserver(this, "dl-done", true);
   },
 
   observe: function (aSubject, aTopic, aData) {
-    
+
     if (aTopic == "dl-start") {
       // pause the download if requested
       if (this.set.doPause) {
         let dl = aSubject.QueryInterface(Ci.nsIDownload);
         // Don't pause immediately, otherwise the external helper app handler
         // won't be able to assign a permanent file name.
         do_execute_soon(function() {
           downloadUtils.downloadManager.pauseDownload(dl.id);
--- a/toolkit/components/downloads/test/unit/test_history_expiration.js
+++ b/toolkit/components/downloads/test/unit/test_history_expiration.js
@@ -66,17 +66,17 @@ add_task(function* test_execute()
     let file = Cc["@mozilla.org/file/directory_service;1"].
                getService(Ci.nsIProperties).get("TmpD", Ci.nsIFile);
     file.append("expireTest");
     stmt.bindByIndex(2, Cc["@mozilla.org/network/io-service;1"].
       getService(Ci.nsIIOService).newFileURI(file).spec);
 
     // Give it some state
     stmt.bindByIndex(3, dm.DOWNLOAD_FINISHED);
-    
+
     stmt.bindByIndex(4, theGUID);
 
     // Add it!
     stmt.execute();
   }
   finally {
     stmt.reset();
     stmt.finalize();
--- a/toolkit/components/feeds/FeedProcessor.js
+++ b/toolkit/components/feeds/FeedProcessor.js
@@ -92,34 +92,34 @@ function isIFeedContainer(a) {
   return isIID(a, Ci.nsIFeedContainer);
 }
 
 function stripTags(someHTML) {
   return someHTML.replace(/<[^>]+>/g,"");
 }
 
 /**
- * Searches through an array of links and returns a JS array 
+ * Searches through an array of links and returns a JS array
  * of matching property bags.
  */
 const IANA_URI = "http://www.iana.org/assignments/relation/";
 function findAtomLinks(rel, links) {
   var rvLinks = [];
   for (var i = 0; i < links.length; ++i) {
     var linkElement = links.queryElementAt(i, Ci.nsIPropertyBag2);
     // atom:link MUST have @href
     if (bagHasKey(linkElement, "href")) {
       var relAttribute = null;
       if (bagHasKey(linkElement, "rel"))
         relAttribute = linkElement.getPropertyAsAString("rel")
       if ((!relAttribute && rel == "alternate") || relAttribute == rel) {
         rvLinks.push(linkElement);
         continue;
       }
-      // catch relations specified by IANA URI 
+      // catch relations specified by IANA URI
       if (relAttribute == IANA_URI + rel) {
         rvLinks.push(linkElement);
       }
     }
   }
   return rvLinks;
 }
 
@@ -172,18 +172,18 @@ var gNamespaces = {
   "http://www.w3.org/2005/Atom":"atom",
   "http://purl.org/atom/ns#":"atom03",
   "http://purl.org/rss/1.0/modules/content/":"content",
   "http://purl.org/dc/elements/1.1/":"dc",
   "http://purl.org/dc/terms/":"dcterms",
   "http://www.w3.org/1999/02/22-rdf-syntax-ns#":"rdf",
   "http://purl.org/rss/1.0/":"rss1",
   "http://my.netscape.com/rdf/simple/0.9/":"rss1",
-  "http://wellformedweb.org/CommentAPI/":"wfw",                              
-  "http://purl.org/rss/1.0/modules/wiki/":"wiki", 
+  "http://wellformedweb.org/CommentAPI/":"wfw",
+  "http://purl.org/rss/1.0/modules/wiki/":"wiki",
   "http://www.w3.org/XML/1998/namespace":"xml",
   "http://search.yahoo.com/mrss/":"media",
   "http://search.yahoo.com/mrss":"media"
 }
 
 // We allow a very small set of namespaces in XHTML content,
 // for attributes only
 var gAllowedXHTMLNamespaces = {
@@ -204,17 +204,17 @@ FeedResult.prototype = {
 
   registerExtensionPrefix: function FR_registerExtensionPrefix(ns, prefix) {
     throw Cr.NS_ERROR_NOT_IMPLEMENTED;
   },
 
   // XPCOM stuff
   classID: FR_CLASSID,
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIFeedResult])
-}  
+}
 
 function Feed() {
   this.subtitle = null;
   this.title = null;
   this.items = Cc[ARRAY_CONTRACTID].createInstance(Ci.nsIMutableArray);
   this.link = null;
   this.id = null;
   this.generator = null;
@@ -262,17 +262,17 @@ Feed.prototype = {
       this._atomLinksToURI();
 
     this._calcEnclosureCountAndFeedType();
 
     // Resolve relative image links
     if (this.image && bagHasKey(this.image, "url"))
       this._resolveImageLink();
 
-    this._resetBagMembersToRawText([this.searchLists.subtitle, 
+    this._resetBagMembersToRawText([this.searchLists.subtitle,
                                     this.searchLists.title]);
   },
 
   _calcEnclosureCountAndFeedType: function Feed_calcEnclosureCountAndFeedType() {
     var entries_with_enclosures = 0;
     var audio_count = 0;
     var image_count = 0;
     var video_count = 0;
@@ -303,17 +303,17 @@ Feed.prototype = {
             ++other_count;
           }
         }
       }
     }
 
     var feedtype = Ci.nsIFeed.TYPE_FEED;
 
-    // For a feed to be marked as TYPE_VIDEO, TYPE_AUDIO and TYPE_IMAGE, 
+    // For a feed to be marked as TYPE_VIDEO, TYPE_AUDIO and TYPE_IMAGE,
     // we enforce two things:
     //
     //    1. all entries must have at least one enclosure
     //    2. all enclosures must be video for TYPE_VIDEO, audio for TYPE_AUDIO or image
     //       for TYPE_IMAGE
     //
     // Otherwise it's a TYPE_FEED.
     if (entries_with_enclosures == this.items.length && other_count == 0) {
@@ -363,27 +363,27 @@ Feed.prototype = {
       LOG(e);
     }
 
     return uri;
   },
 
   // reset the bag to raw contents, not text constructs
   _resetBagMembersToRawText: function Feed_resetBagMembers(fieldLists) {
-    for (var i=0; i<fieldLists.length; i++) {      
+    for (var i=0; i<fieldLists.length; i++) {
       for (var j=0; j<fieldLists[i].length; j++) {
         if (bagHasKey(this.fields, fieldLists[i][j])) {
           var textConstruct = this.fields.getProperty(fieldLists[i][j]);
           this.fields.setPropertyAsAString(fieldLists[i][j],
                                            textConstruct.text);
         }
       }
     }
   },
-  
+
   // XPCOM stuff
   classID: FEED_CLASSID,
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIFeed, Ci.nsIFeedContainer])
 }
 
 function Entry() {
   this.summary = null;
   this.content = null;
@@ -393,67 +393,67 @@ function Entry() {
   this.link = null;
   this.id = null;
   this.baseURI = null;
   this.updated = null;
   this.published = null;
   this.authors = Cc[ARRAY_CONTRACTID].createInstance(Ci.nsIMutableArray);
   this.contributors = Cc[ARRAY_CONTRACTID].createInstance(Ci.nsIMutableArray);
 }
-  
+
 Entry.prototype = {
   fields: null,
   enclosures: null,
   mediaContent: null,
-  
+
   searchLists: {
     title: ["title", "rss1:title", "atom03:title", "atom:title"],
     link: [["link",strToURI],["rss1:link",strToURI]],
     id: [["guid", makePropGetter("guid")], "rdf:about",
          "atom03:id", "atom:id"],
     authors : ["authors"],
     contributors: ["contributors"],
     summary: ["description", "rss1:description", "dc:description",
               "atom03:summary", "atom:summary"],
     content: ["content:encoded","atom03:content","atom:content"],
     rights: ["atom03:rights","atom:rights"],
     published: ["pubDate", "atom03:issued", "dcterms:issued", "atom:published"],
     updated: ["pubDate", "atom03:modified", "dc:date", "dcterms:modified",
               "atom:updated"]
   },
-  
+
   normalize: function Entry_normalize() {
     fieldsToObj(this, this.searchLists);
- 
+
     // Assign Atom link if needed
     if (bagHasKey(this.fields, "links"))
       this._atomLinksToURI();
 
     // Populate enclosures array
     this._populateEnclosures();
 
     // The link might be a guid w/ permalink=true
     if (!this.link && bagHasKey(this.fields, "guid")) {
       var guid = this.fields.getProperty("guid");
       var isPermaLink = true;
-      
+
       if (bagHasKey(guid, "isPermaLink"))
         isPermaLink = guid.getProperty("isPermaLink").toLowerCase() != "false";
-      
+
       if (guid && isPermaLink)
         this.link = strToURI(guid.getProperty("guid"));
     }
 
     if (this.updated)
       this.updated = dateParse(this.updated);
     if (this.published)
       this.published = dateParse(this.published);
 
-    this._resetBagMembersToRawText([this.searchLists.content, 
-                                    this.searchLists.summary, 
+    this._resetBagMembersToRawText([this.searchLists.content,
+                                    this.searchLists.summary,
                                     this.searchLists.title]);
   },
 
   _populateEnclosures: function Entry_populateEnclosures() {
     if (bagHasKey(this.fields, "links"))
       this._atomLinksToEnclosures();
 
     // Add RSS2 enclosure to enclosures
@@ -489,17 +489,17 @@ Entry.prototype = {
     if (previous_enc != undefined) {
       previous_enc.QueryInterface(Ci.nsIWritablePropertyBag2);
 
       if (!bagHasKey(previous_enc, "type") && bagHasKey(new_enc, "type"))
         previous_enc.setPropertyAsAString("type", new_enc.getPropertyAsAString("type"));
 
       if (!bagHasKey(previous_enc, "length") && bagHasKey(new_enc, "length"))
         previous_enc.setPropertyAsAString("length", new_enc.getPropertyAsAString("length"));
-      
+
       return;
     }
 
     if (this.enclosures == null) {
       this.enclosures = Cc[ARRAY_CONTRACTID].createInstance(Ci.nsIMutableArray);
       this.enclosures.QueryInterface(Ci.nsIMutableArray);
     }
 
@@ -586,17 +586,17 @@ Entry.prototype = {
   classID: ENTRY_CLASSID,
   QueryInterface: XPCOMUtils.generateQI(
     [Ci.nsIFeedEntry, Ci.nsIFeedContainer]
   )
 }
 
 Entry.prototype._atomLinksToURI = Feed.prototype._atomLinksToURI;
 Entry.prototype._resolveURI = Feed.prototype._resolveURI;
-Entry.prototype._resetBagMembersToRawText = 
+Entry.prototype._resetBagMembersToRawText =
    Feed.prototype._resetBagMembersToRawText;
 
 // TextConstruct represents and element that could contain (X)HTML
 function TextConstruct() {
   this.lang = null;
   this.base = null;
   this.type = "text";
   this.text = null;
@@ -628,17 +628,17 @@ TextConstruct.prototype = {
     else if (this.type == "html")
       isXML = false;
     else
       return null;
 
     return this.parserUtils.parseFragment(this.text, 0, isXML,
                                           this.base, element);
   },
- 
+
   // XPCOM stuff
   classID: TEXTCONSTRUCT_CLASSID,
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIFeedTextConstruct])
 }
 
 // Generator represents the software that produced the feed
 function Generator() {
   this.lang = null;
@@ -692,36 +692,36 @@ function Person() {
 Person.prototype = {
   // XPCOM stuff
   classID: PERSON_CLASSID,
   QueryInterface: XPCOMUtils.generateQI(
     [Ci.nsIFeedPerson, Ci.nsIFeedElementBase]
   )
 }
 
-/** 
+/**
  * Map a list of fields into properties on a container.
  *
  * @param container An nsIFeedContainer
  * @param fields A list of fields to search for. List members can
- *               be a list, in which case the second member is 
+ *               be a list, in which case the second member is
  *               transformation function (like parseInt).
  */
 function fieldsToObj(container, fields) {
   var props,prop,field,searchList;
   for (var key in fields) {
     searchList = fields[key];
     for (var i=0; i < searchList.length; ++i) {
       props = searchList[i];
       prop = null;
       field = isArray(props) ? props[0] : props;
       try {
         prop = container.fields.getProperty(field);
-      } 
-      catch(e) { 
+      }
+      catch(e) {
       }
       if (prop) {
         prop = isArray(props) ? props[1](prop) : prop;
         container[key] = prop;
       }
     }
   }
 }
@@ -749,43 +749,43 @@ function atomLogo(s, logo) {
   logo.setPropertyAsAString("url", s.trim());
 }
 
 // post-process an RSS category, map it to the Atom fields.
 function rssCatTerm(s, cat) {
   // add slash handling?
   cat.setPropertyAsAString("term", s.trim());
   return cat;
-} 
+}
 
-// post-process a GUID 
+// post-process a GUID
 function rssGuid(s, guid) {
   guid.setPropertyAsAString("guid", s.trim());
   return guid;
 }
 
 // post-process an RSS author element
 //
 // It can contain a field like this:
-// 
+//
 //  <author>lawyer@boyer.net (Lawyer Boyer)</author>
 //
 // or, delightfully, a field like this:
 //
 //  <dc:creator>Simon St.Laurent (mailto:simonstl@simonstl.com)</dc:creator>
 //
 // We want to split this up and assign it to corresponding Atom
 // fields.
 //
 function rssAuthor(s,author) {
   author.QueryInterface(Ci.nsIFeedPerson);
   // check for RSS2 string format
   var chars = s.trim();
   var matches = chars.match(/(.*)\((.*)\)/);
-  var emailCheck = 
+  var emailCheck =
     /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
   if (matches) {
     var match1 = matches[1].trim();
     var match2 = matches[2].trim();
     if (match2.indexOf("mailto:") == 0)
       match2 = match2.substring(7);
     if (emailCheck.test(match1)) {
       author.email = match1;
@@ -831,17 +831,17 @@ function dateParse(aDateString) {
   // Without bug 682781 fixed, JS won't parse an RFC822 date with a Z for the
   // timezone, so convert to -00:00 which works for any date format.
   dateString = dateString.replace(/z$/i, "-00:00");
   let date = new Date(dateString);
   if (!isNaN(date)) {
     return date.toUTCString();
   }
   return null;
-} 
+}
 
 const XHTML_NS = "http://www.w3.org/1999/xhtml";
 
 // The XHTMLHandler handles inline XHTML found in things like atom:summary
 function XHTMLHandler(processor, isAtom) {
   this._buf = "";
   this._processor = processor;
   this._depth = 0;
@@ -849,17 +849,17 @@ function XHTMLHandler(processor, isAtom)
   // a stack of lists tracking in-scope namespaces
   this._inScopeNS = [];
 }
 
 // The fidelity can be improved here, to allow handling of stuff like
 // SVG and MathML. XXX
 XHTMLHandler.prototype = {
 
-   // look back up at the declared namespaces 
+   // look back up at the declared namespaces
    // we always use the same prefixes for our safe stuff
   _isInScope: function XH__isInScope(ns) {
     for (var i in this._inScopeNS) {
       for (var uri in this._inScopeNS[i]) {
         if (this._inScopeNS[i][uri] == ns)
           return true;
       }
     }
@@ -869,43 +869,43 @@ XHTMLHandler.prototype = {
   startDocument: function XH_startDocument() {
   },
   endDocument: function XH_endDocument() {
   },
   startElement: function XH_startElement(namespace, localName, qName, attributes) {
     ++this._depth;
     this._inScopeNS.push([]);
 
-    // RFC4287 requires XHTML to be wrapped in a div that is *not* part of 
+    // RFC4287 requires XHTML to be wrapped in a div that is *not* part of
     // the content. This prevents people from screwing up namespaces, but
     // we need to skip it here.
     if (this._isAtom && this._depth == 1 && localName == "div")
       return;
 
     // If it's an XHTML element, record it. Otherwise, it's ignored.
     if (namespace == XHTML_NS) {
       this._buf += "<" + localName;
       var uri;
       for (var i=0; i < attributes.length; ++i) {
         uri = attributes.getURI(i);
         // XHTML attributes aren't in a namespace
-        if (uri == "") { 
+        if (uri == "") {
           this._buf += (" " + attributes.getLocalName(i) + "='" +
                         xmlEscape(attributes.getValue(i)) + "'");
         } else {
           // write a small set of allowed attribute namespaces
           var prefix = gAllowedXHTMLNamespaces[uri];
           if (prefix != null) {
             // The attribute value we'll attempt to write
             var attributeValue = xmlEscape(attributes.getValue(i));
 
-            // it's an allowed attribute NS.            
+            // it's an allowed attribute NS.
             // write the attribute
-            this._buf += (" " + prefix + ":" + 
-                          attributes.getLocalName(i) + 
+            this._buf += (" " + prefix + ":" +
+                          attributes.getLocalName(i) +
                           "='" + attributeValue + "'");
 
             // write an xmlns declaration if necessary
             if (prefix != "xml" && !this._isInScope(uri)) {
               this._inScopeNS[this._inScopeNS.length - 1].push(uri);
               this._buf += " xmlns:" + prefix + "='" + uri + "'";
             }
           }
@@ -936,17 +936,17 @@ XHTMLHandler.prototype = {
   characters: function XH_characters(data) {
     this._buf += xmlEscape(data);
   },
   startPrefixMapping: function XH_startPrefixMapping(prefix, uri) {
   },
   endPrefixMapping: function FP_endPrefixMapping(prefix) {
   },
   processingInstruction: function XH_processingInstruction() {
-  }, 
+  },
 }
 
 /**
  * The ExtensionHandler deals with elements we haven't explicitly
  * added to our transition table in the FeedProcessor.
  */
 function ExtensionHandler(processor) {
   this._buf = "";
@@ -967,55 +967,55 @@ ExtensionHandler.prototype = {
   startDocument: function EH_startDocument() {
   },
   endDocument: function EH_endDocument() {
   },
   startElement: function EH_startElement(uri, localName, qName, attrs) {
     ++this._depth;
     var prefix = gNamespaces[uri] ? gNamespaces[uri] + ":" : "";
     var key =  prefix + localName;
-    
+
     if (this._depth == 1) {
       this._uri = uri;
       this._localName = localName;
       this._qName = qName;
       this._attrs = attrs;
     }
-    
+
     // if we descend into another element, we won't send text
     this._hasChildElements = (this._depth > 1);
-    
+
   },
   endElement: function EH_endElement(uri, localName, qName) {
     --this._depth;
     if (this._depth == 0) {
       var text = this._hasChildElements ? null : this._buf.trim();
-      this._processor.returnFromExtHandler(this._uri, this._localName, 
+      this._processor.returnFromExtHandler(this._uri, this._localName,
                                            text, this._attrs);
     }
   },
   characters: function EH_characters(data) {
     if (!this._hasChildElements)
       this._buf += data;
   },
   startPrefixMapping: function EH_startPrefixMapping() {
   },
   endPrefixMapping: function EH_endPrefixMapping() {
   },
   processingInstruction: function EH_processingInstruction() {
-  }, 
+  },
 };
 
 
 /**
  * ElementInfo is a simple container object that describes
  * some characteristics of a feed element. For example, it
  * says whether an element can be expected to appear more
  * than once inside a given entry or feed.
- */ 
+ */
 function ElementInfo(fieldName, containerClass, closeFunc, isArray) {
   this.fieldName = fieldName;
   this.containerClass = containerClass;
   this.closeFunc = closeFunc;
   this.isArray = isArray;
   this.isWrapper = false;
 }
 
@@ -1046,17 +1046,17 @@ function FeedProcessor() {
   this._handlerStack = [];
   this._xmlBaseStack = []; // sparse array keyed to nesting depth
   this._depth = 0;
   this._state = "START";
   this._result = null;
   this._extensionHandler = null;
   this._xhtmlHandler = null;
   this._haveSentResult = false;
-  
+
   // The nsIFeedResultListener waiting for the parse results
   this.listener = null;
 
   // These elements can contain (X)HTML or plain text.
   // We keep a table here that contains their default treatment
   this._textConstructs = {"atom:title":"text",
                           "atom:summary":"text",
                           "atom:rights":"text",
@@ -1069,32 +1069,32 @@ function FeedProcessor() {
                           "title":"text",
                           "rss1:title":"text",
                           "atom03:title":"text",
                           "atom03:tagline":"text",
                           "atom03:summary":"text",
                           "atom03:content":"text"};
   this._stack = [];
 
-  this._trans = {   
+  this._trans = {
     "START": {
       //If we hit a root RSS element, treat as RSS2.
       "rss": new FeedElementInfo("RSS2", "rss2"),
 
       // If we hit an RDF element, if could be RSS1, but we can't
       // verify that until we hit a rss1:channel element.
       "rdf:RDF": new WrapperElementInfo("RDF"),
 
       // If we hit a Atom 1.0 element, treat as Atom 1.0.
       "atom:feed": new FeedElementInfo("Atom", "atom"),
 
       // Treat as Atom 0.3
       "atom03:feed": new FeedElementInfo("Atom03", "atom03"),
     },
-    
+
     /********* RSS2 **********/
     "IN_RSS2": {
       "channel": new WrapperElementInfo("channel")
     },
 
     "IN_CHANNEL": {
       "item": new ElementInfo("items", Cc[ENTRY_CONTRACTID], null, true),
       "managingEditor": new ElementInfo("authors", Cc[PERSON_CONTRACTID],
@@ -1139,17 +1139,17 @@ function FeedProcessor() {
     "IN_SKIPHOURS":{
       "hour": new ElementInfo("hours", null, rssArrayElement, true)
     },
 
     "IN_MEDIAGROUP": {
       "media:content": new ElementInfo("mediacontent", null, null, true),
       "media:thumbnail": new ElementInfo("mediathumbnail", null, null, true)
     },
- 
+
     /********* RSS1 **********/
     "IN_RDF": {
       // If we hit a rss1:channel, we can verify that we have RSS1
       "rss1:channel": new FeedElementInfo("rdf_channel", "rss1"),
       "rss1:image": new ElementInfo("image", null, null, false),
       "rss1:textinput": new ElementInfo("textInput", null, null, false),
       "rss1:item": new ElementInfo("items", Cc[ENTRY_CONTRACTID], null, true),
     },
@@ -1211,18 +1211,18 @@ function FeedProcessor() {
       "atom03:link": new ElementInfo("links", null, null, true),
       "atom03:entry": new ElementInfo("atom03_entries", Cc[ENTRY_CONTRACTID],
                                       null, true)
     }
   }
 }
 
 // See startElement for a long description of how feeds are processed.
-FeedProcessor.prototype = { 
-  
+FeedProcessor.prototype = {
+
   // Set ourselves as the SAX handler, and set the base URI
   _init: function FP_init(uri) {
     this._reader.contentHandler = this;
     this._reader.errorHandler = this;
     this._result = Cc[FR_CONTRACTID].createInstance(Ci.nsIFeedResult);
     if (uri) {
       this._result.uri = uri;
       this._reader.baseURI = uri;
@@ -1230,17 +1230,17 @@ FeedProcessor.prototype = {
     }
   },
 
   // This function is called once we figure out what type of feed
   // we're dealing with. Some feed types require digging a bit further
   // than the root.
   _docVerified: function FP_docVerified(version) {
     this._result.doc = Cc[FEED_CONTRACTID].createInstance(Ci.nsIFeed);
-    this._result.doc.baseURI = 
+    this._result.doc.baseURI =
       this._xmlBaseStack[this._xmlBaseStack.length - 1];
     this._result.doc.fields = this._feed;
     this._result.version = version;
   },
 
   // When we're done with the feed, let the listener know what
   // happened.
   _sendResult: function FP_sendResult() {
@@ -1261,33 +1261,33 @@ FeedProcessor.prototype = {
     finally {
       this._result = null;
     }
   },
 
   // Parsing functions
   parseFromStream: function FP_parseFromStream(stream, uri) {
     this._init(uri);
-    this._reader.parseFromStream(stream, null, stream.available(), 
+    this._reader.parseFromStream(stream, null, stream.available(),
                                  "application/xml");
     this._reader = null;
   },
 
   parseFromString: function FP_parseFromString(inputString, uri) {
     this._init(uri);
     this._reader.parseFromString(inputString, "application/xml");
     this._reader = null;
   },
 
   parseAsync: function FP_parseAsync(requestObserver, uri) {
     this._init(uri);
     this._reader.parseAsync(requestObserver);
   },
 
-  // nsIStreamListener 
+  // nsIStreamListener
 
   // The XMLReader will throw sensible exceptions if these get called
   // out of order.
   onStartRequest: function FP_onStartRequest(request, context) {
     // this will throw if the request is not a channel, but so will nsParser.
     var channel = request.QueryInterface(Ci.nsIChannel);
     channel.contentType = "application/vnd.mozilla.maybe.feed";
     this._reader.onStartRequest(request, context);
@@ -1337,29 +1337,29 @@ FeedProcessor.prototype = {
   // do Atom authors. The only commonly used elements that contain
   // mixed content are Atom Text Constructs of type="xhtml", which we
   // delegate to another handler for cleaning. That leaves a couple
   // different types of elements to deal with: those that should occur
   // only once, such as title elements, and those that can occur
   // multiple times, such as the RSS category element and the Atom
   // link element. Most of the RSS1/DC elements can occur multiple
   // times in theory, but in practice, the only ones that do have
-  // analogues in Atom. 
+  // analogues in Atom.
   //
   // Some elements are also groups of attributes or sub-elements,
   // while others are simple text fields. For the most part, we don't
   // have to pay explicit attention to the simple text elements,
   // unless we want to post-process the resulting string to transform
   // it into some richer object like a Date or URI.
   //
   // Elements that have more sophisticated content models still end up
   // being dictionaries, whether they are based on attributes like RSS
   // cloud, sub-elements like Atom author, or even items and
   // entries. These elements are treated as "containers". It's
-  // theoretically possible for a container to have an attribute with 
+  // theoretically possible for a container to have an attribute with
   // the same universal name as a sub-element, but none of the feed
   // formats allow this by default, and I don't of any extension that
   // works this way.
   //
   startElement: function FP_startElement(uri, localName, qName, attributes) {
     this._buf = "";
     ++this._depth;
     var elementInfo;
@@ -1378,36 +1378,36 @@ FeedProcessor.prototype = {
     // a "canonical" prefix for a namespace URI. For example, this
     // allows Dublin Core "creator" elements to be consistently mapped
     // to "dc:creator", for easy field access by consumer code. This
     // strategy also happens to shorten up our state table.
     var key =  this._prefixForNS(uri) + localName;
 
     // Check to see if we need to hand this off to our XHTML handler.
     // The elements we're dealing with will look like this:
-    // 
+    //
     // <title type="xhtml">
     //   <div xmlns="http://www.w3.org/1999/xhtml">
     //     A title with <b>bold</b> and <i>italics</i>.
     //   </div>
     // </title>
     //
     // When it returns in returnFromXHTMLHandler, the handler should
-    // give us back a string like this: 
-    // 
+    // give us back a string like this:
+    //
     //    "A title with <b>bold</b> and <i>italics</i>."
     //
     // The Atom spec explicitly says the div is not part of the content,
     // and explicitly allows whitespace collapsing.
-    // 
+    //
     if ((this._result.version == "atom" || this._result.version == "atom03") &&
         this._textConstructs[key] != null) {
       var type = attributes.getValueFromName("","type");
       if (type != null && type.indexOf("xhtml") >= 0) {
-        this._xhtmlHandler = 
+        this._xhtmlHandler =
           new XHTMLHandler(this, (this._result.version == "atom"));
         this._reader.contentHandler = this._xhtmlHandler;
         return;
       }
     }
 
     // Check our current state, and see if that state has a defined
     // transition. For example, this._trans["atom:entry"]["atom:author"]
@@ -1417,24 +1417,24 @@ FeedProcessor.prototype = {
     }
     else {
       // If we don't have a transition, hand off to extension handler
       this._extensionHandler = new ExtensionHandler(this);
       this._reader.contentHandler = this._extensionHandler;
       this._extensionHandler.startElement(uri, localName, qName, attributes);
       return;
     }
-      
+
     // This distinguishes wrappers like 'channel' from elements
     // we'd actually like to do something with (which will test true).
-    this._handlerStack[this._depth] = elementInfo; 
+    this._handlerStack[this._depth] = elementInfo;
     if (elementInfo.isWrapper) {
       this._state = "IN_" + elementInfo.fieldName.toUpperCase();
       this._stack.push([this._feed, this._state]);
-    } 
+    }
     else if (elementInfo.feedVersion) {
       this._state = "IN_" + elementInfo.fieldName.toUpperCase();
 
       // Check for the older RSS2 variants
       if (elementInfo.feedVersion == "rss2")
         elementInfo.feedVersion = this._findRSSVersion(attributes);
       else if (uri == RSS090NS)
         elementInfo.feedVersion = "rss090";
@@ -1453,17 +1453,17 @@ FeedProcessor.prototype = {
   // of the state transition works as above in startElement, but
   // the state we're looking for is prefixed with an underscore
   // to distinguish endElement events from startElement events.
   endElement:  function FP_endElement(uri, localName, qName) {
     var elementInfo = this._handlerStack[this._depth];
     //LOG("</" + localName + ">");
     if (elementInfo && !elementInfo.isWrapper)
       this._closeComplexElement(elementInfo);
-  
+
     // cut down xml:base context
     if (this._xmlBaseStack.length == this._depth + 1)
       this._xmlBaseStack = this._xmlBaseStack.slice(0, this._depth);
 
     // our new state is whatever is at the top of the stack now
     if (this._stack.length > 0)
       this._state = this._stack[this._stack.length - 1][1];
     this._handlerStack = this._handlerStack.slice(0, this._depth);
@@ -1471,41 +1471,41 @@ FeedProcessor.prototype = {
   },
 
   // Buffer up character data. The buffer is cleared with every
   // opening element.
   characters: function FP_characters(data) {
     this._buf += data;
   },
   // TODO: It would be nice to check new prefixes here, and if they
-  // don't conflict with the ones we've defined, throw them in a 
+  // don't conflict with the ones we've defined, throw them in a
   // dictionary to check.
   startPrefixMapping: function FP_startPrefixMapping(prefix, uri) {
   },
-  
+
   endPrefixMapping: function FP_endPrefixMapping(prefix) {
   },
-  
+
   processingInstruction: function FP_processingInstruction(target, data) {
     if (target == "xml-stylesheet") {
       var hrefAttribute = data.match(/href=[\"\'](.*?)[\"\']/);
-      if (hrefAttribute && hrefAttribute.length == 2) 
+      if (hrefAttribute && hrefAttribute.length == 2)
         this._result.stylesheet = strToURI(hrefAttribute[1], this._result.uri);
     }
   },
 
   // end of nsISAXContentHandler
 
   // Handle our more complicated elements--those that contain
   // attributes and child elements.
   _processComplexElement:
   function FP__processComplexElement(elementInfo, attributes) {
     var obj, key, prefix;
 
-    // If the container is an entry/item, it'll need to have its 
+    // If the container is an entry/item, it'll need to have its
     // more esoteric properties put in the 'fields' property bag.
     if (elementInfo.containerClass == Cc[ENTRY_CONTRACTID]) {
       obj = elementInfo.containerClass.createInstance(Ci.nsIFeedEntry);
       obj.baseURI = this._xmlBaseStack[this._xmlBaseStack.length - 1];
       this._mapAttributes(obj.fields, attributes);
     }
     else if (elementInfo.containerClass) {
       obj = elementInfo.containerClass.createInstance(Ci.nsIFeedElementBase);
@@ -1527,45 +1527,45 @@ FeedProcessor.prototype = {
 
     // Check to see if it has the property
     var prop;
     try {
       prop = container.getProperty(elementInfo.fieldName);
     }
     catch(e) {
     }
-    
+
     if (elementInfo.isArray) {
       if (!prop) {
         container.setPropertyAsInterface(elementInfo.fieldName,
                                          Cc[ARRAY_CONTRACTID].
                                          createInstance(Ci.nsIMutableArray));
       }
 
       newProp = container.getProperty(elementInfo.fieldName);
       // XXX This QI should not be necessary, but XPConnect seems to fly
       // off the handle in the browser, and loses track of the interface
       // on large files. Bug 335638.
       newProp.QueryInterface(Ci.nsIMutableArray);
       newProp.appendElement(obj,false);
-      
+
       // If new object is an nsIFeedContainer, we want to deal with
       // its member nsIPropertyBag instead.
       if (isIFeedContainer(obj))
-        newProp = obj.fields; 
+        newProp = obj.fields;
 
     }
     else {
       // If it doesn't, set it.
       if (!prop) {
         container.setPropertyAsInterface(elementInfo.fieldName,obj);
       }
       newProp = container.getProperty(elementInfo.fieldName);
     }
-    
+
     // make our new state name, and push the property onto the stack
     var newState = "IN_" + elementInfo.fieldName.toUpperCase();
     this._stack.push([newProp, newState, obj]);
     return newState;
   },
 
   // Sometimes we need reconcile the element content with the object
   // model for a given feed. We use helper functions to do the
@@ -1593,17 +1593,17 @@ FeedProcessor.prototype = {
     // we need to normalize it
     if (elementInfo.containerClass == Cc[ENTRY_CONTRACTID])
       containerParent.normalize();
 
     // If it's an array, re-set the last element
     if (isArray)
       container.replaceElementAt(element, container.length - 1, false);
   },
-  
+
   _prefixForNS: function FP_prefixForNS(uri) {
     if (!uri)
       return "";
     var prefix = gNamespaces[uri];
     if (prefix)
       return prefix + ":";
     if (uri.toLowerCase().indexOf("http://backend.userland.com") == 0)
       return "";
@@ -1644,70 +1644,70 @@ FeedProcessor.prototype = {
     // take control of the SAX events
     this._reader.contentHandler = this;
     if (localName == null && chars == null)
       return;
 
     // we don't take random elements inside rdf:RDF
     if (this._state == "IN_RDF")
       return;
-    
+
     // Grab the top of the stack
     var top = this._stack[this._stack.length - 1];
-    if (!top) 
+    if (!top)
       return;
 
     var container = top[0];
     // Grab the last element if it's an array
     if (isIArray(container)) {
       var contract = this._handlerStack[this._depth].containerClass;
       // check if it's something specific, but not an entry
       if (contract && contract != Cc[ENTRY_CONTRACTID]) {
-        var el = container.queryElementAt(container.length - 1, 
+        var el = container.queryElementAt(container.length - 1,
                                           Ci.nsIFeedElementBase);
         // XXX there must be a way to flatten these interfaces
-        if (contract == Cc[PERSON_CONTRACTID]) 
+        if (contract == Cc[PERSON_CONTRACTID])
           el.QueryInterface(Ci.nsIFeedPerson);
         else
           return; // don't know about this interface
 
         let propName = localName;
         var prefix = gNamespaces[uri];
 
         // synonyms
-        if ((uri == "" || 
+        if ((uri == "" ||
              prefix &&
              ((prefix.indexOf("atom") > -1) ||
-              (prefix.indexOf("rss") > -1))) && 
+              (prefix.indexOf("rss") > -1))) &&
             (propName == "url" || propName == "href"))
           propName = "uri";
-        
+
         try {
           if (el[propName] !== "undefined") {
             var propValue = chars;
             // convert URI-bearing values to an nsIURI
             if (propName == "uri") {
               var base = this._xmlBaseStack[this._xmlBaseStack.length - 1];
               propValue = strToURI(chars, base);
             }
             el[propName] = propValue;
           }
         }
         catch(e) {
           // ignore XPConnect errors
         }
         // the rest of the function deals with entry- and feed-level stuff
-        return; 
-      } 
+        return;
+      }
       else {
-        container = container.queryElementAt(container.length - 1, 
+        container = container.queryElementAt(container.length - 1,
                                              Ci.nsIWritablePropertyBag2);
       }
     }
-    
+
     // Make the buffer our new property
     var propName = this._prefixForNS(uri) + localName;
 
     // But, it could be something containing HTML. If so,
     // we need to know about that.
     if (this._textConstructs[propName] != null &&
         this._handlerStack[this._depth].containerClass !== null) {
       var newProp = Cc[TEXTCONSTRUCT_CONTRACTID].
@@ -1725,17 +1725,17 @@ FeedProcessor.prototype = {
         }
         else if (typeAttribute.toLowerCase().indexOf("html") >= 0) {
           type = "html";
         }
         else if (typeAttribute.toLowerCase().indexOf("text") >= 0) {
           type = "text";
         }
       }
-      
+
       // If it's rss feed-level description, it's not supposed to have html
       if (this._result.version.indexOf("rss") >= 0 &&
           this._handlerStack[this._depth].containerClass != ENTRY_CONTRACTID) {
         type = "text";
       }
       newProp.type = type;
       newProp.base = this._xmlBaseStack[this._xmlBaseStack.length - 1];
       container.setPropertyAsInterface(propName, newProp);
@@ -1751,29 +1751,29 @@ FeedProcessor.prototype = {
   // XHTMLHandler is done, it'll callback here.
   returnFromXHTMLHandler:
   function FP_returnFromXHTMLHandler(chars, uri, localName, qName) {
     // retake control of the SAX content events
     this._reader.contentHandler = this;
 
     // Grab the top of the stack
     var top = this._stack[this._stack.length - 1];
-    if (!top) 
+    if (!top)
       return;
     var container = top[0];
 
     // Assign the property
     var newProp =  newProp = Cc[TEXTCONSTRUCT_CONTRACTID].
                    createInstance(Ci.nsIFeedTextConstruct);
     newProp.text = chars;
     newProp.type = "xhtml";
     newProp.base = this._xmlBaseStack[this._xmlBaseStack.length - 1];
     container.setPropertyAsInterface(this._prefixForNS(uri) + localName,
                                      newProp);
-    
+
     // XHTML will cause us to peek too far. The XHTML handler will
     // send us an end element to call. RFC4287-valid feeds allow a
     // more graceful way to handle this. Unfortunately, we can't count
     // on compliance at this point.
     this.endElement(uri, localName, qName);
   },
 
   // XPCOM stuff
--- a/toolkit/components/feeds/test/test_xml.js
+++ b/toolkit/components/feeds/test/test_xml.js
@@ -9,17 +9,17 @@
  * called 'xml', where the testcases live.
  *
  * The directory layout looks something like this:
  *
  * tests/test_xml.js*
  *      |
  *      - head.js
  *      |
- *      - xml/ -- rss1/... 
+ *      - xml/ -- rss1/...
  *             |
  *             -- rss2/...
  *             |
  *             -- atom/testcase.xml
  *
  * To add more tests, just include the file in the xml subfolder and add its name to xpcshell.ini
  */
 
--- a/toolkit/components/filepicker/content/filepicker.js
+++ b/toolkit/components/filepicker/content/filepicker.js
@@ -66,17 +66,17 @@ function filepickerLoad() {
     newDirButton.removeAttribute("hidden");
   }
 
   if (filePickerMode == nsIFilePicker.modeGetFolder) {
     var textInputLabel = document.getElementById("textInputLabel");
     textInputLabel.value = gFilePickerBundle.getString("dirTextInputLabel");
     textInputLabel.accessKey = gFilePickerBundle.getString("dirTextInputAccesskey");
   }
-  
+
   if ((filePickerMode == nsIFilePicker.modeOpen) ||
       (filePickerMode == nsIFilePicker.modeOpenMultiple) ||
       (filePickerMode == nsIFilePicker.modeSave)) {
 
     /* build filter popup */
     var filterPopup = document.createElement("menupopup");
 
     for (var i = 0; i < numFilters; i++) {
@@ -292,17 +292,17 @@ function selectOnOK()
                           file);
           ret = nsIFilePicker.returnCancel;
         } else {
           // we need to pop up a dialog asking if you want to save
           var confirmTitle = gFilePickerBundle.getString("confirmTitle");
           var message =
             gFilePickerBundle.getFormattedString("confirmFileReplacing",
                                                  [file.path]);
-          
+
           promptService = Components.classes[NS_PROMPTSERVICE_CONTRACTID].getService(Components.interfaces.nsIPromptService);
           var rv = promptService.confirm(window, confirmTitle, message);
           if (rv) {
             ret = nsIFilePicker.returnReplace;
             retvals.directory = file.parent.path;
           } else {
             ret = nsIFilePicker.returnCancel;
           }
@@ -355,17 +355,17 @@ function selectOnOK()
       break;
     }
   }
 
   gFilesEnumerator.mFiles = fileList;
 
   retvals.files = gFilesEnumerator;
   retvals.buttonStatus = ret;
-  
+
   return (ret != nsIFilePicker.returnCancel);
 }
 
 var gFilesEnumerator = {
   mFiles: null,
   mIndex: 0,
 
   hasMoreElements: function()
@@ -415,49 +415,49 @@ function openSelectedFile() {
 function onClick(e) {
   var t = e.originalTarget;
   if (t.localName == "treecol")
     handleColumnClick(t.id);
 }
 
 function convertColumnIDtoSortType(columnID) {
   var sortKey;
-  
+
   switch (columnID) {
   case "FilenameColumn":
     sortKey = nsIFileView.sortName;
     break;
   case "FileSizeColumn":
     sortKey = nsIFileView.sortSize;
     break;
   case "LastModifiedColumn":
     sortKey = nsIFileView.sortDate;
     break;
   default:
     dump("unsupported sort column: " + columnID + "\n");
     sortKey = 0;
     break;
   }
-  
+
   return sortKey;
 }
 
 function handleColumnClick(columnID) {
   var sortType = convertColumnIDtoSortType(columnID);
   var sortOrder = (treeView.sortType == sortType) ? !treeView.reverseSort : false;
   treeView.sort(sortType, sortOrder);
-  
+
   // set the sort indicator on the column we are sorted by
   var sortedColumn = document.getElementById(columnID);
   if (treeView.reverseSort) {
     sortedColumn.setAttribute("sortDirection", "descending");
   } else {
     sortedColumn.setAttribute("sortDirection", "ascending");
   }
-  
+
   // remove the sort indicator from the rest of the columns
   var currCol = sortedColumn.parentNode.firstChild;
   while (currCol) {
     if (currCol != sortedColumn && currCol.localName == "treecol")
       currCol.removeAttribute("sortDirection");
     currCol = currCol.nextSibling;
   }
 }
@@ -592,33 +592,33 @@ function onDirectoryChanged(target)
 }
 
 function populateAncestorList(directory) {
   var menu = document.getElementById("lookInMenu");
 
   while (menu.hasChildNodes()) {
     menu.removeChild(menu.firstChild);
   }
-  
+
   var menuItem = document.createElement("menuitem");
   menuItem.setAttribute("label", directory.path);
   menuItem.setAttribute("crop", "start");
   menu.appendChild(menuItem);
 
   // .parent is _sometimes_ null, see bug 121489.  Do a dance around that.
   var parent = directory.parent;
   while (parent && !parent.equals(directory)) {
     menuItem = document.createElement("menuitem");
     menuItem.setAttribute("label", parent.path);
     menuItem.setAttribute("crop", "start");
     menu.appendChild(menuItem);
     directory = parent;
     parent = directory.parent;
   }
-  
+
   var menuList = document.getElementById("lookInMenuList");
   menuList.selectedIndex = 0;
 }
 
 function goUp() {
   try {
     var parent = sfile.parent;
   } catch(ex) { dump("can't get parent directory\n"); }
@@ -645,17 +645,17 @@ function newDir() {
   if (ret) {
     file = processPath(gNewDirName.value);
     if (!file) {
       showErrorDialog("errorCreateNewDirTitle",
                       "errorCreateNewDirMessage",
                       file);
       return false;
     }
-    
+
     file = file[0].QueryInterface(nsIFile);
     if (file.exists()) {
       showErrorDialog("errorNewDirDoesExistTitle",
                       "errorNewDirDoesExistMessage",
                       file);
       return false;
     }
 
@@ -676,29 +676,29 @@ function newDir() {
         showErrorDialog("errorCreateNewDirTitle",
                         "errorCreateNewDirPermissionMessage",
                         parent);
         return false;
       }
     }
 
     try {
-      file.create(nsIFile.DIRECTORY_TYPE, 0755); 
+      file.create(nsIFile.DIRECTORY_TYPE, 0755);
     } catch (e) {
       showErrorDialog("errorCreateNewDirTitle",
                       "errorCreateNewDirMessage",
                       file);
       return false;
     }
     file.normalize(); // ... in case ".." was used in the path
     gotoDirectory(file);
     // we remember and reshow a dirname if something goes wrong
     // so that errors can be corrected more easily. If all went well,
     // reset the default value to blank
-    gNewDirName = { value: "" }; 
+    gNewDirName = { value: "" };
   }
   return true;
 }
 
 function gotoDirectory(directory) {
   window.setCursor("wait");
   try {
     populateAncestorList(directory);
@@ -745,17 +745,17 @@ function processPath(path)
       var nextQuote;
 
       // Look for an unescaped quote
       var quoteSearchStart = curFileStart + 1;
       do {
         nextQuote = path.indexOf('"', quoteSearchStart);
         quoteSearchStart = nextQuote + 1;
       } while (nextQuote != -1 && path[nextQuote - 1] == '\\');
-      
+
       if (nextQuote == -1) {
         // we have a filename with no trailing quote.
         // just assume that the filename ends at the end of the string.
 
         if (!processPathEntry(path.substring(curFileStart), fileArray))
           return false;
         break;
       }
@@ -802,17 +802,17 @@ function processPathEntry(path, fileArra
       !(path == "~" && tilde_file.exists()) && // If ~ was entered and such a file exists, don't expand
       (path.length == 1 || path[1] == "/"))    // We don't want to expand ~file to ${HOME}file
     filePath = homeDir.path + path.substring(1);
   else
     filePath = path;
 
   // Unescape quotes
   filePath = filePath.replace(/\\\"/g, "\"");
-  
+
   if (filePath[0] == '/')   /* an absolute path was entered */
     file.initWithPath(filePath);
   else if ((filePath.indexOf("/../") > 0) ||
            (filePath.substr(-3) == "/..") ||
            (filePath.substr(0,3) == "../") ||
            (filePath == "..")) {
     /* appendRelativePath doesn't allow .. */
     try{
--- a/toolkit/components/gfx/SanityTest.js
+++ b/toolkit/components/gfx/SanityTest.js
@@ -223,17 +223,17 @@ var listener = {
     if (this.mm) {
       // We don't have a MessageManager if onWindowLoaded never fired.
       this.messages.forEach((msgName) => {
         this.mm.removeMessageListener(msgName, this);
       });
 
       this.mm = null;
     }
-  
+
     // Remove the annotation after we've cleaned everything up, to catch any
     // incidental crashes from having performed the sanity test.
     annotateCrashReport(false);
   }
 };
 
 function SanityTest() {}
 SanityTest.prototype = {
--- a/toolkit/components/microformats/Microformats.js
+++ b/toolkit/components/microformats/Microformats.js
@@ -11,29 +11,29 @@ this.Microformats = {
   /* for (i in Microformats) */
   __iterator__: function* () {
     for (let i=0; i < this.list.length; i++) {
       yield this.list[i];
     }
   },
   /**
    * Retrieves microformats objects of the given type from a document
-   * 
+   *
    * @param  name          The name of the microformat (required)
    * @param  rootElement   The DOM element at which to start searching (required)
    * @param  options       Literal object with the following options:
    *                       recurseExternalFrames - Whether or not to search child frames
    *                       that reference external pages (with a src attribute)
    *                       for microformats (optional - defaults to true)
    *                       showHidden -  Whether or not to add hidden microformat
    *                       (optional - defaults to false)
    *                       debug - Whether or not we are in debug mode (optional
    *                       - defaults to false)
    * @param  targetArray  An array of microformat objects to which is added the results (optional)
-   * @return A new array of microformat objects or the passed in microformat 
+   * @return A new array of microformat objects or the passed in microformat
    *         object array with the new objects added
    */
   get: function(name, rootElement, options, targetArray) {
     function isAncestor(haystack, needle) {
       var parent = needle;
       while (parent = parent.parentNode) {
         /* We need to check parentNode because defaultView.frames[i].frameElement */
         /* isn't a real DOM node */
@@ -69,27 +69,27 @@ this.Microformats = {
     if (Microformats[name].className) {
       microformatNodes = Microformats.getElementsByClassName(rootElement,
                                         Microformats[name].className);
       /* alternateClassName is for cases where a parent microformat is inferred by the children */
       /* If we find alternateClassName, the entire document becomes the microformat */
       if ((microformatNodes.length == 0) && Microformats[name].alternateClassName) {
         var altClass = Microformats.getElementsByClassName(rootElement, Microformats[name].alternateClassName);
         if (altClass.length > 0) {
-          microformatNodes.push(rootElement); 
+          microformatNodes.push(rootElement);
         }
       }
     } else if (Microformats[name].attributeValues) {
       microformatNodes =
         Microformats.getElementsByAttribute(rootElement,
                                             Microformats[name].attributeName,
                                             Microformats[name].attributeValues);
-      
+
     }
-    
+
 
     function isVisible(node, checkChildren) {
       if (node.getBoundingClientRect) {
         var box = node.getBoundingClientRect();
       } else {
         box = node.ownerDocument.getBoxObjectFor(node);
       }
       /* If the parent has is an empty box, double check the children */
@@ -104,17 +104,17 @@ this.Microformats = {
               }
             }
           }
         }
         return false
       }
       return true;
     }
-    
+
     /* Create objects for the microformat nodes and put them into the microformats */
     /* array */
     for (let i = 0; i < microformatNodes.length; i++) {
       /* If showHidden undefined or false, don't add microformats to the list that aren't visible */
       if (!options || !options.hasOwnProperty("showHidden") || !options.showHidden) {
         if (microformatNodes[i].ownerDocument) {
           if (!isVisible(microformatNodes[i], true)) {
             continue;
@@ -133,17 +133,17 @@ this.Microformats = {
         /* Creation of individual object probably failed because it is invalid. */
         /* This isn't a problem, because the page might have invalid microformats */
       }
     }
     return targetArray;
   },
   /**
    * Counts microformats objects of the given type from a document
-   * 
+   *
    * @param  name          The name of the microformat (required)
    * @param  rootElement   The DOM element at which to start searching (required)
    * @param  options       Literal object with the following options:
    *                       recurseExternalFrames - Whether or not to search child frames
    *                       that reference external pages (with a src attribute)
    *                       for microformats (optional - defaults to true)
    *                       showHidden -  Whether or not to add hidden microformat
    *                       (optional - defaults to false)
@@ -221,17 +221,17 @@ this.Microformats = {
     xpathResult = (node.ownerDocument || node).evaluate(xpathExpression, node, null,  Components.interfaces.nsIDOMXPathResult.FIRST_ORDERED_NODE_TYPE, null);
     if (xpathResult.singleNodeValue) {
       xpathResult.singleNodeValue.microformat = mfname;
       return xpathResult.singleNodeValue;
     }
     return null;
   },
   /**
-   * If the passed in node is a microformat, this function returns a space 
+   * If the passed in node is a microformat, this function returns a space
    * separated list of the microformat names that correspond to this node
    *
    * @param  node          DOM node to check
    * @return If the node is a microformat, a space separated list of microformat
    *         names, otherwise returns nothing
    */
   getNamesFromNode: function(node) {
     var microformatNames = [];
@@ -271,17 +271,17 @@ this.Microformats = {
   debug: function debug(microformatObject) {
     function dumpObject(item, indent)
     {
       if (!indent) {
         indent = "";
       }
       var toreturn = "";
       var testArray = [];
-      
+
       for (let i in item)
       {
         if (testArray[i]) {
           continue;
         }
         if (typeof item[i] == "object") {
           if ((i != "node") && (i != "resolvedNode")) {
             if (item[i] && item[i].semanticType) {
@@ -349,19 +349,19 @@ this.Microformats = {
         /* Remove any double spaces that are left */
         outstring = outstring.replace(/\s{2,}/gi, '');
         /* Remove any spaces at the beginning */
         outstring = outstring.replace(/^\s+/, '');
         /* Remove any spaces at the end */
         outstring = outstring.replace(/\s+$/, '');
         return outstring;
       }
-      
-      
-      if (((((propnode.localName.toLowerCase() == "abbr") || (propnode.localName.toLowerCase() == "html:abbr")) && !propnode.namespaceURI) || 
+
+
+      if (((((propnode.localName.toLowerCase() == "abbr") || (propnode.localName.toLowerCase() == "html:abbr")) && !propnode.namespaceURI) ||
          ((propnode.localName.toLowerCase() == "abbr") && (propnode.namespaceURI == "http://www.w3.org/1999/xhtml"))) && (propnode.hasAttribute("title"))) {
         return propnode.getAttribute("title");
       } else if ((propnode.nodeName.toLowerCase() == "img") && (propnode.hasAttribute("alt"))) {
         return propnode.getAttribute("alt");
       } else if ((propnode.nodeName.toLowerCase() == "area") && (propnode.hasAttribute("alt"))) {
         return propnode.getAttribute("alt");
       } else if ((propnode.nodeName.toLowerCase() == "textarea") ||
                  (propnode.nodeName.toLowerCase() == "select") ||
@@ -436,17 +436,17 @@ this.Microformats = {
       }
       return Microformats.parser.textGetter(propnode, parentnode);
     },
     /**
      * Used to specifically retrieve a telephone number in a microformat node.
      * Basically this is to handle the face that telephone numbers use value
      * as the name as one of their subproperties, but value is also used for
      * value excerpting (http://microformats.org/wiki/hcard#Value_excerpting)
-     
+
      * @param  propnode   The DOMNode to check
      * @param  parentnode The parent node of the property. If it is a subproperty,
      *                    this is the parent property node. If it is not, this is the
      *                    microformat node.
      * @return A string with the telephone number
      */
     telGetter: function(propnode, parentnode) {
       var pairs = {"a":"href", "object":"data", "area":"href"};
@@ -663,32 +663,32 @@ this.Microformats = {
       var node = in_node;
       if ((Microformats[microformat].className) && in_node.ownerDocument) {
         node = Microformats.parser.preProcessMicroformat(in_node);
       }
 
       for (let i in Microformats[microformat].properties) {
         object.__defineGetter__(i, Microformats.parser.getMicroformatPropertyGenerator(node, microformat, i, object));
       }
-      
+
       /* The node in the object should be the original node */
       object.node = in_node;
       /* we also store the node that has been "resolved" */
-      object.resolvedNode = node; 
+      object.resolvedNode = node;
       object.semanticType = microformat;
       if (validate) {
         Microformats.parser.validate(node, microformat);
       }
     },
     getMicroformatPropertyGenerator: function getMicroformatPropertyGenerator(node, name, property, microformat)
     {
       return function() {
         var result = Microformats.parser.getMicroformatProperty(node, name, property);
 //        delete microformat[property];
-//        microformat[property] = result; 
+//        microformat[property] = result;
         return result;
       };
     },
     getPropertyInternal: function getPropertyInternal(propnode, parentnode, propobj, propname, mfnode) {
       var result;
       if (propobj.subproperties) {
         for (let subpropname in propobj.subproperties) {
           var subpropnodes;
@@ -910,17 +910,17 @@ this.Microformats = {
         return true;
       }
     },
     /* This function normalizes an ISO8601 date by adding punctuation and */
     /* ensuring that hours and seconds have values */
     normalizeISO8601: function normalizeISO8601(string)
     {
       var dateArray = string.match(/(\d\d\d\d)(?:-?(\d\d)(?:-?(\d\d)(?:[T ](\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(?:([-+Z])(?:(\d\d)(?::?(\d\d))?)?)?)?)?)?/);
-  
+
       var dateString;
       var tzOffset = 0;
       if (!dateArray) {
         return undefined;
       }
       if (dateArray[1]) {
         dateString = dateArray[1];
         if (dateArray[2]) {
@@ -960,23 +960,23 @@ this.Microformats = {
       return dateString;
     }
   },
   /**
    * Converts an ISO8601 date into a JavaScript date object, honoring the TZ
    * offset and Z if present to convert the date to local time
    * NOTE: I'm using an extra parameter on the date object for this function.
    * I set date.time to true if there is a date, otherwise date.time is false.
-   * 
+   *
    * @param  string ISO8601 formatted date
-   * @return JavaScript date object that represents the ISO date. 
+   * @return JavaScript date object that represents the ISO date.
    */
   dateFromISO8601: function dateFromISO8601(string) {
     var dateArray = string.match(/(\d\d\d\d)(?:-?(\d\d)(?:-?(\d\d)(?:[T ](\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(?:([-+Z])(?:(\d\d)(?::?(\d\d))?)?)?)?)?)?/);
-  
+
     var date = new Date(dateArray[1], 0, 1);
     date.time = false;
 
     if (dateArray[2]) {
       date.setMonth(dateArray[2] - 1);
     }
     if (dateArray[3]) {
       date.setDate(dateArray[3]);
@@ -1006,32 +1006,32 @@ this.Microformats = {
           date.setMinutes(date.getMinutes() - parseInt(dateArray[10], 10));
         }
       }
       /* at this point we have the time in gmt */
       /* convert to local if we had a Z - or + */
       if (dateArray[8]) {
         var tzOffset = date.getTimezoneOffset();
         if (tzOffset < 0) {
-          date.setMinutes(date.getMinutes() + tzOffset); 
+          date.setMinutes(date.getMinutes() + tzOffset);
         } else if (tzOffset > 0) {
-          date.setMinutes(date.getMinutes() - tzOffset); 
+          date.setMinutes(date.getMinutes() - tzOffset);
         }
       }
     }
     return date;
   },
   /**
    * Converts a Javascript date object into an ISO 8601 formatted date
    * NOTE: I'm using an extra parameter on the date object for this function.
    * If date.time is NOT true, this function only outputs the date.
-   * 
+   *
    * @param  date        Javascript Date object
    * @param  punctuation true if the date should have -/:
-   * @return string with the ISO date. 
+   * @return string with the ISO date.
    */
   iso8601FromDate: function iso8601FromDate(date, punctuation) {
     var string = date.getFullYear().toString();
     if (punctuation) {
       string += "-";
     }
     string += (date.getMonth() + 1).toString().replace(/\b(\d)\b/g, '0$1');
     if (punctuation) {
@@ -1072,17 +1072,17 @@ this.Microformats = {
     s = s.replace(/ /g, '+');
     return s;
   },
   /**
    * Not intended for external consumption. Microformat implementations might use it.
    *
    * Retrieve elements matching all classes listed in a space-separated string.
    * I had to implement my own because I need an Array, not an nsIDomNodeList
-   * 
+   *
    * @param  rootElement      The DOM element at which to start searching (optional)
    * @param  className        A space separated list of classenames
    * @return microformatNodes An array of DOM Nodes, each representing a
                               microformat in the document.
    */
   getElementsByClassName: function getElementsByClassName(rootNode, className)
   {
     var returnElements = [];
@@ -1114,17 +1114,17 @@ this.Microformats = {
       }
     }
     return returnElements;
   },
   /**
    * Not intended for external consumption. Microformat implementations might use it.
    *
    * Retrieve elements matching an attribute and an attribute list in a space-separated string.
-   * 
+   *
    * @param  rootElement      The DOM element at which to start searching (optional)
    * @param  atributeName     The attribute name to match against
    * @param  attributeValues  A space separated list of attribute values
    * @return microformatNodes An array of DOM Nodes, each representing a
                               microformat in the document.
    */
   getElementsByAttribute: function getElementsByAttribute(rootNode, attributeName, attributeValues)
   {
@@ -1137,17 +1137,17 @@ this.Microformats = {
       /* Create an XPath expression based on the attribute list */
       var xpathExpression = ".//*[";
       for (let i = 0; i < attributeList.length; i++) {
         if (i != 0) {
           xpathExpression += " or ";
         }
         xpathExpression += "contains(concat(' ', @" + attributeName + ", ' '), ' " + attributeList[i] + " ')";
       }
-      xpathExpression += "]"; 
+      xpathExpression += "]";
 
       var xpathResult = (rootNode.ownerDocument || rootNode).evaluate(xpathExpression, rootNode, null, 0, null);
 
       var node;
       while (node = xpathResult.iterateNext()) {
         returnElements.push(node);
       }
     } else {
@@ -1309,17 +1309,17 @@ var hCard_definition = {
           plural: true,
           values: ["internet", "x400", "pref"]
         },
         "value" : {
           datatype: "email",
           virtual: true
         }
       },
-      plural: true   
+      plural: true
     },
     "fn" : {
       required: true
     },
     "geo" : {
       datatype: "microformat",
       microformat: "geo"
     },
--- a/toolkit/components/microformats/microformat-shiv.js
+++ b/toolkit/components/microformats/microformat-shiv.js
@@ -1,31 +1,31 @@
 /*
    Modern
    microformat-shiv - v1.3.3
    Built: 2015-12-31 01:12 - http://microformat-shiv.com
    Copyright (c) 2015 Glenn Jones
-   Licensed MIT 
+   Licensed MIT
 */
 
 
 var Microformats; // jshint ignore:line
 
 (function (root, factory) {
     if (typeof define === 'function' && define.amd) {
         define([], factory);
     } else if (typeof exports === 'object') {
         module.exports = factory();
     } else {
         root.Microformats = factory();
   }
 }(this, function () {
-    
+
     var modules = {};
-    
+
 
 	modules.version = '1.3.3';
 	modules.livingStandard = '2015-09-25T12:26:04Z';
 
 	/**
 	 * constructor
 	 *
 	 */
@@ -1458,62 +1458,62 @@ var Microformats; // jshint ignore:line
 	};
 
 
 	modules.Parser.prototype.constructor = modules.Parser;
 
 
 	// check parser module is loaded
 	if(modules.Parser){
-	
+
 		/**
-		 * applies "implied rules" microformat output structure i.e. feed-title, name, photo, url and date 
+		 * applies "implied rules" microformat output structure i.e. feed-title, name, photo, url and date
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf (microformat output structure)
 		 * @param  {Object} parentClasses (classes structure)
 		 * @param  {Boolean} impliedPropertiesByVersion
 		 * @return {Object}
 		 */
 		 modules.Parser.prototype.impliedRules = function(node, uf, parentClasses) {
 			var typeVersion = (uf.typeVersion)? uf.typeVersion: 'v2';
-			
+
 			// TEMP: override to allow v1 implied properties while spec changes
 			if(this.options.impliedPropertiesByVersion === false){
 				typeVersion = 'v2';
 			}
-			
+
 			if(node && uf && uf.properties) {
-				uf = this.impliedBackwardComp( node, uf, parentClasses );  
+				uf = this.impliedBackwardComp( node, uf, parentClasses );
 				if(typeVersion === 'v2'){
 					uf = this.impliedhFeedTitle( uf );
-					uf = this.impliedName( node, uf ); 
-					uf = this.impliedPhoto( node, uf ); 	
+					uf = this.impliedName( node, uf );
+					uf = this.impliedPhoto( node, uf );
 					uf = this.impliedUrl( node, uf );
 				}
 				uf = this.impliedValue( node, uf, parentClasses );
 				uf = this.impliedDate( uf );
-				
+
 				// TEMP: flagged while spec changes are put forward
 				if(this.options.parseLatLonGeo === true){
 					uf = this.impliedGeo( uf );
-				}  
+				}
 			}
 
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * apply implied name rule
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */		
+		 */
 		modules.Parser.prototype.impliedName = function(node, uf) {
 			// implied name rule
 			/*
 				img.h-x[alt]										<img class="h-card" src="glenn.htm" alt="Glenn Jones"></a>
 				area.h-x[alt] 										<area class="h-card" href="glenn.htm" alt="Glenn Jones"></area>
 				abbr.h-x[title]										<abbr class="h-card" title="Glenn Jones"GJ</abbr>
 
 				.h-x>img:only-child[alt]:not[.h-*]					<div class="h-card"><a src="glenn.htm" alt="Glenn Jones"></a></div>
@@ -1521,134 +1521,134 @@ var Microformats; // jshint ignore:line
 				.h-x>abbr:only-child[title] 						<div class="h-card"><abbr title="Glenn Jones">GJ</abbr></div>
 
 				.h-x>:only-child>img:only-child[alt]:not[.h-*] 		<div class="h-card"><span><img src="jane.html" alt="Jane Doe"/></span></div>
 				.h-x>:only-child>area:only-child[alt]:not[.h-*] 	<div class="h-card"><span><area href="jane.html" alt="Jane Doe"></area></span></div>
 				.h-x>:only-child>abbr:only-child[title]				<div class="h-card"><span><abbr title="Jane Doe">JD</abbr></span></div>
 			*/
 			var name,
 				value;
-					
+
 			if(!uf.properties.name) {
 				value = this.getImpliedProperty(node, ['img', 'area', 'abbr'], this.getNameAttr);
 				var textFormat = this.options.textFormat;
 				// if no value for tags/properties use text
 				if(!value) {
 					name = [modules.text.parse(this.document, node, textFormat)];
 				}else{
 					name = [modules.text.parseText(this.document, value, textFormat)];
 				}
 				if(name && name[0] !== ''){
 					uf.properties.name = name;
 				}
 			}
-			
+
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * apply implied photo rule
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */		
+		 */
 		modules.Parser.prototype.impliedPhoto = function(node, uf) {
 			// implied photo rule
 			/*
 				img.h-x[src] 												<img class="h-card" alt="Jane Doe" src="jane.jpeg"/>
 				object.h-x[data] 											<object class="h-card" data="jane.jpeg"/>Jane Doe</object>
-				.h-x>img[src]:only-of-type:not[.h-*]						<div class="h-card"><img alt="Jane Doe" src="jane.jpeg"/></div> 
-				.h-x>object[data]:only-of-type:not[.h-*] 					<div class="h-card"><object data="jane.jpeg"/>Jane Doe</object></div> 
-				.h-x>:only-child>img[src]:only-of-type:not[.h-*] 			<div class="h-card"><span><img alt="Jane Doe" src="jane.jpeg"/></span></div> 
-				.h-x>:only-child>object[data]:only-of-type:not[.h-*] 		<div class="h-card"><span><object data="jane.jpeg"/>Jane Doe</object></span></div> 
+				.h-x>img[src]:only-of-type:not[.h-*]						<div class="h-card"><img alt="Jane Doe" src="jane.jpeg"/></div>
+				.h-x>object[data]:only-of-type:not[.h-*] 					<div class="h-card"><object data="jane.jpeg"/>Jane Doe</object></div>
+				.h-x>:only-child>img[src]:only-of-type:not[.h-*] 			<div class="h-card"><span><img alt="Jane Doe" src="jane.jpeg"/></span></div>
+				.h-x>:only-child>object[data]:only-of-type:not[.h-*] 		<div class="h-card"><span><object data="jane.jpeg"/>Jane Doe</object></span></div>
 			*/
 			var value;
 			if(!uf.properties.photo) {
 				value = this.getImpliedProperty(node, ['img', 'object'], this.getPhotoAttr);
 				if(value) {
 					// relative to absolute URL
 					if(value && value !== '' && this.options.baseUrl !== '' && value.indexOf('://') === -1) {
 						value = modules.url.resolve(value, this.options.baseUrl);
 					}
 					uf.properties.photo = [modules.utils.trim(value)];
 				}
-			}		
+			}
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * apply implied URL rule
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */		
+		 */
 		modules.Parser.prototype.impliedUrl = function(node, uf) {
 			// implied URL rule
 			/*
 				a.h-x[href]  							<a class="h-card" href="glenn.html">Glenn</a>
 				area.h-x[href]  						<area class="h-card" href="glenn.html">Glenn</area>
-				.h-x>a[href]:only-of-type:not[.h-*]  	<div class="h-card" ><a href="glenn.html">Glenn</a><p>...</p></div> 
+				.h-x>a[href]:only-of-type:not[.h-*]  	<div class="h-card" ><a href="glenn.html">Glenn</a><p>...</p></div>
 				.h-x>area[href]:only-of-type:not[.h-*]  <div class="h-card" ><area href="glenn.html">Glenn</area><p>...</p></div>
 			*/
 			var value;
 			if(!uf.properties.url) {
 				value = this.getImpliedProperty(node, ['a', 'area'], this.getURLAttr);
 				if(value) {
 					// relative to absolute URL
 					if(value && value !== '' && this.options.baseUrl !== '' && value.indexOf('://') === -1) {
 						value = modules.url.resolve(value, this.options.baseUrl);
 					}
 					uf.properties.url = [modules.utils.trim(value)];
 				}
-			}	
+			}
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * apply implied date rule - if there is a time only property try to concat it with any date property
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */		
+		 */
 		modules.Parser.prototype.impliedDate = function(uf) {
 			// implied date rule
 			// http://microformats.org/wiki/value-class-pattern#microformats2_parsers
 			// http://microformats.org/wiki/microformats2-parsing-issues#implied_date_for_dt_properties_both_mf2_and_backcompat
 			var newDate;
 			if(uf.times.length > 0 && uf.dates.length > 0) {
 				newDate = modules.dates.dateTimeUnion(uf.dates[0][1], uf.times[0][1], this.options.dateFormat);
 				uf.properties[this.removePropPrefix(uf.times[0][0])][0] = newDate.toString(this.options.dateFormat);
 			}
 			// clean-up object
 			delete uf.times;
 			delete uf.dates;
 			return uf;
 		};
-			
-			
+
+
 		/**
 		 * get an implied property value from pre-defined tag/attriubte combinations
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {String} tagList (Array of tags from which an implied value can be pulled)
 		 * @param  {String} getAttrFunction (Function which can extract implied value)
 		 * @return {String || null}
 		 */
 		modules.Parser.prototype.getImpliedProperty = function(node, tagList, getAttrFunction) {
 			// i.e. img.h-card
-			var value = getAttrFunction(node), 
+			var value = getAttrFunction(node),
 				descendant,
 				child;
-					
+
 			if(!value) {
 				// i.e. .h-card>img:only-of-type:not(.h-card)
 				descendant = modules.domUtils.getSingleDescendantOfType( node, tagList);
 				if(descendant && this.hasHClass(descendant) === false){
 					value = getAttrFunction(descendant);
 				}
 				if(node.children.length > 0 ){
 					// i.e.  .h-card>:only-child>img:only-of-type:not(.h-card)
@@ -1656,114 +1656,114 @@ var Microformats; // jshint ignore:line
 					if(child && this.hasHClass(child) === false){
 						descendant = modules.domUtils.getSingleDescendantOfType(child, tagList);
 						if(descendant && this.hasHClass(descendant) === false){
 							value = getAttrFunction(descendant);
 						}
 					}
 				}
 			}
-					
+
 			return value;
 		};
-			
-			
+
+
 		/**
 		 * get an implied name value from a node
 		 *
 		 * @param  {DOM Node} node
 		 * @return {String || null}
-		 */		
+		 */
 		modules.Parser.prototype.getNameAttr = function(node) {
 			var value = modules.domUtils.getAttrValFromTagList(node, ['img','area'], 'alt');
 			if(!value) {
 				value = modules.domUtils.getAttrValFromTagList(node, ['abbr'], 'title');
 			}
 			return value;
 		};
-	
-	
+
+
 		/**
 		 * get an implied photo value from a node
 		 *
 		 * @param  {DOM Node} node
 		 * @return {String || null}
-		 */	
+		 */
 		modules.Parser.prototype.getPhotoAttr = function(node) {
 			var value = modules.domUtils.getAttrValFromTagList(node, ['img'], 'src');
 			if(!value && modules.domUtils.hasAttributeValue(node, 'class', 'include') === false) {
 				value = modules.domUtils.getAttrValFromTagList(node, ['object'], 'data');
 			}
 			return value;
 		};
-			
-			
+
+
 		/**
 		 * get an implied photo value from a node
 		 *
 		 * @param  {DOM Node} node
 		 * @return {String || null}
-		 */		
+		 */
 		modules.Parser.prototype.getURLAttr = function(node) {
 			var value = null;
 			if(modules.domUtils.hasAttributeValue(node, 'class', 'include') === false){
-				
+
 				value = modules.domUtils.getAttrValFromTagList(node, ['a'], 'href');
 				if(!value) {
 					value = modules.domUtils.getAttrValFromTagList(node, ['area'], 'href');
 				}
-				
+
 			}
 			return value;
 		};
-		
-		
+
+
 		/**
-		 * 
+		 *
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */	
+		 */
 		modules.Parser.prototype.impliedValue = function(node, uf, parentClasses){
-			
+
 			// intersection of implied name and implied value rules
-			if(uf.properties.name) {	
+			if(uf.properties.name) {
 				if(uf.value && parentClasses.root.length > 0 && parentClasses.properties.length === 1){
 					uf = this.getAltValue(uf, parentClasses.properties[0][0], 'p-name', uf.properties.name[0]);
 				}
 			}
-			
+
 			// intersection of implied URL and implied value rules
 			if(uf.properties.url) {
 				if(parentClasses && parentClasses.root.length === 1 && parentClasses.properties.length === 1){
 					uf = this.getAltValue(uf, parentClasses.properties[0][0], 'u-url', uf.properties.url[0]);
 				}
-			}	
-			
+			}
+
 			// apply alt value
 			if(uf.altValue !== null){
 				uf.value = uf.altValue.value;
 			}
 			delete uf.altValue;
-	
-	
+
+
 			return uf;
 		};
-			
-		
+
+
 		/**
 		 * get alt value based on rules about parent property prefix
 		 *
 		 * @param  {Object} uf
 		 * @param  {String} parentPropertyName
 		 * @param  {String} propertyName
 		 * @param  {String} value
 		 * @return {Object}
-		 */	
+		 */
 		modules.Parser.prototype.getAltValue = function(uf, parentPropertyName, propertyName, value){
 			if(uf.value && !uf.altValue){
 				// first p-name of the h-* child
 				if(modules.utils.startWith(parentPropertyName,'p-') && propertyName === 'p-name'){
 					uf.altValue = {name: propertyName, value: value};
 				}
 				// if it's an e-* property element
 				if(modules.utils.startWith(parentPropertyName,'e-') && modules.utils.startWith(propertyName,'e-')){
@@ -1771,266 +1771,266 @@ var Microformats; // jshint ignore:line
 				}
 				// if it's an u-* property element
 				if(modules.utils.startWith(parentPropertyName,'u-') && propertyName === 'u-url'){
 					uf.altValue = {name: propertyName, value: value};
 				}
 			}
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * if a h-feed does not have a title use the title tag of a page
 		 *
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */	
+		 */
 		modules.Parser.prototype.impliedhFeedTitle = function( uf ){
 			if(uf.type && uf.type.indexOf('h-feed') > -1){
 				// has no name property
 				if(uf.properties.name === undefined || uf.properties.name[0] === '' ){
 					// use the text from the title tag
 					var title = modules.domUtils.querySelector(this.document, 'title');
 					if(title){
 						uf.properties.name = [modules.domUtils.textContent(title)];
 					}
 				}
 			}
 			return uf;
 		};
-		
-		
-		
+
+
+
 	    /**
 		 * implied Geo from pattern <abbr class="p-geo" title="37.386013;-122.082932">
 		 *
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */	
+		 */
 		modules.Parser.prototype.impliedGeo = function( uf ){
 			var geoPair,
 				parts,
 				longitude,
 				latitude,
 				valid = true;
-			
+
 			if(uf.type && uf.type.indexOf('h-geo') > -1){
-				
+
 				// has no latitude or longitude property
 				if(uf.properties.latitude === undefined || uf.properties.longitude === undefined ){
 
 					geoPair = (uf.properties.name)? uf.properties.name[0] : null;
 					geoPair = (!geoPair && uf.properties.value)? uf.properties.value : geoPair;
-					
+
 					if(geoPair){
 						// allow for the use of a ';' as in microformats and also ',' as in Geo URL
 						geoPair = geoPair.replace(';',',');
-						
+
 						// has sep char
 						if(geoPair.indexOf(',') > -1 ){
 							parts = geoPair.split(',');
-							
+
 							// only correct if we have two or more parts
 							if(parts.length > 1){
 
-								// latitude no value outside the range -90 or 90 
+								// latitude no value outside the range -90 or 90
 								latitude = parseFloat( parts[0] );
 								if(modules.utils.isNumber(latitude) && latitude > 90 || latitude < -90){
 									valid = false;
 								}
-								
+
 								// longitude no value outside the range -180 to 180
 								longitude = parseFloat( parts[1] );
 								if(modules.utils.isNumber(longitude) && longitude > 180 || longitude < -180){
 									valid = false;
 								}
-								
+
 								if(valid){
 									uf.properties.latitude = [latitude];
 									uf.properties.longitude  = [longitude];
 								}
 							}
-							
+
 						}
 					}
 				}
 			}
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * if a backwards compat built structure has no properties add name through this.impliedName
 		 *
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */	
+		 */
 		modules.Parser.prototype.impliedBackwardComp = function(node, uf, parentClasses){
-			
+
 			// look for pattern in parent classes like "p-geo h-geo"
 			// these are structures built from backwards compat parsing of geo
 			if(parentClasses.root.length === 1 && parentClasses.properties.length === 1) {
 				if(parentClasses.root[0].replace('h-','') === this.removePropPrefix(parentClasses.properties[0][0])) {
-					
+
 					// if microformat has no properties apply the impliedName rule to get value from containing node
 					// this will get value from html such as <abbr class="geo" title="30.267991;-97.739568">Brighton</abbr>
 					if( modules.utils.hasProperties(uf.properties) === false ){
 						uf = this.impliedName( node, uf );
 					}
 				}
 			}
-			
+
 			return uf;
 		};
-		
-		
-	
+
+
+
 	}
 
 
 	// check parser module is loaded
 	if(modules.Parser){
-	
-		
+
+
 		/**
 		 * appends clones of include Nodes into the DOM structure
 		 *
 		 * @param  {DOM node} rootNode
-		 */	
+		 */
 		modules.Parser.prototype.addIncludes = function(rootNode) {
 			this.addAttributeIncludes(rootNode, 'itemref');
 			this.addAttributeIncludes(rootNode, 'headers');
 			this.addClassIncludes(rootNode);
 		};
-	
-		
+
+
 		/**
 		 * appends clones of include Nodes into the DOM structure for attribute based includes
 		 *
 		 * @param  {DOM node} rootNode
 		 * @param  {String} attributeName
 		 */
 		modules.Parser.prototype.addAttributeIncludes = function(rootNode, attributeName) {
 			var arr,
 				idList,
 				i,
 				x,
 				z,
 				y;
-	
+
 			arr = modules.domUtils.getNodesByAttribute(rootNode, attributeName);
 			x = 0;
 			i = arr.length;
 			while(x < i) {
 				idList = modules.domUtils.getAttributeList(arr[x], attributeName);
 				if(idList) {
 					z = 0;
 					y = idList.length;
 					while(z < y) {
 						this.apppendInclude(arr[x], idList[z]);
 						z++;
 					}
 				}
 				x++;
 			}
 		};
-	
-		
+
+
 		/**
 		 * appends clones of include Nodes into the DOM structure for class based includes
 		 *
 		 * @param  {DOM node} rootNode
 		 */
 		modules.Parser.prototype.addClassIncludes = function(rootNode) {
 			var id,
 				arr,
 				x = 0,
 				i;
-	
+
 			arr = modules.domUtils.getNodesByAttributeValue(rootNode, 'class', 'include');
 			i = arr.length;
 			while(x < i) {
 				id = modules.domUtils.getAttrValFromTagList(arr[x], ['a'], 'href');
 				if(!id) {
 					id = modules.domUtils.getAttrValFromTagList(arr[x], ['object'], 'data');
 				}
 				this.apppendInclude(arr[x], id);
 				x++;
 			}
 		};
-	
-	
+
+
 		/**
 		 * appends a clone of an include into another Node using Id
 		 *
 		 * @param  {DOM node} rootNode
 		 * @param  {Stringe} id
 		 */
 		modules.Parser.prototype.apppendInclude = function(node, id){
 			var include,
 				clone;
-	
+
 			id = modules.utils.trim(id.replace('#', ''));
 			include = modules.domUtils.getElementById(this.document, id);
 			if(include) {
 				clone = modules.domUtils.clone(include);
 				this.markIncludeChildren(clone);
 				modules.domUtils.appendChild(node, clone);
 			}
 		};
-	
-		
+
+
 		/**
-		 * adds an attribute marker to all the child microformat roots 
+		 * adds an attribute marker to all the child microformat roots
 		 *
 		 * @param  {DOM node} rootNode
-		 */ 
+		 */
 		modules.Parser.prototype.markIncludeChildren = function(rootNode) {
 			var arr,
 				x,
 				i;
-	
+
 			// loop the array and add the attribute
 			arr = this.findRootNodes(rootNode);
 			x = 0;
 			i = arr.length;
 			modules.domUtils.setAttribute(rootNode, 'data-include', 'true');
 			modules.domUtils.setAttribute(rootNode, 'style', 'display:none');
 			while(x < i) {
 				modules.domUtils.setAttribute(arr[x], 'data-include', 'true');
 				x++;
 			}
 		};
-		
-		
+
+
 		/**
-		 * removes all appended include clones from DOM 
+		 * removes all appended include clones from DOM
 		 *
 		 * @param  {DOM node} rootNode
-		 */ 
+		 */
 		modules.Parser.prototype.removeIncludes = function(rootNode){
 			var arr,
 				i;
-	
+
 			// remove all the items that were added as includes
 			arr = modules.domUtils.getNodesByAttribute(rootNode, 'data-include');
 			i = arr.length;
 			while(i--) {
 				modules.domUtils.removeChild(rootNode,arr[i]);
 			}
 		};
-	
-		
+
+
 	}
 
 
 	// check parser module is loaded
 	if(modules.Parser){
-	
+
 		/**
 		 * finds rel=* structures
 		 *
 		 * @param  {DOM node} rootNode
 		 * @return {Object}
 		 */
 		modules.Parser.prototype.findRels = function(rootNode) {
 			var out = {
@@ -2042,363 +2042,363 @@ var Microformats; // jshint ignore:line
 				i,
 				y,
 				z,
 				relList,
 				items,
 				item,
 				value,
 				arr;
-	
+
 			arr = modules.domUtils.getNodesByAttribute(rootNode, 'rel');
 			x = 0;
 			i = arr.length;
 			while(x < i) {
 				relList = modules.domUtils.getAttribute(arr[x], 'rel');
-	
+
 				if(relList) {
 					items = relList.split(' ');
-					
-					
+
+
 					// add rels
 					z = 0;
 					y = items.length;
 					while(z < y) {
 						item = modules.utils.trim(items[z]);
-	
+
 						// get rel value
 						value = modules.domUtils.getAttrValFromTagList(arr[x], ['a', 'area'], 'href');
 						if(!value) {
 							value = modules.domUtils.getAttrValFromTagList(arr[x], ['link'], 'href');
 						}
-	
+
 						// create the key
 						if(!out.rels[item]) {
 							out.rels[item] = [];
 						}
-	
+
 						if(typeof this.options.baseUrl === 'string' && typeof value === 'string') {
-					
+
 							var resolved = modules.url.resolve(value, this.options.baseUrl);
 							// do not add duplicate rels - based on resolved URLs
 							if(out.rels[item].indexOf(resolved) === -1){
 								out.rels[item].push( resolved );
 							}
 						}
 						z++;
 					}
-					
-					
+
+
 					var url = null;
 					if(modules.domUtils.hasAttribute(arr[x], 'href')){
 						url = modules.domUtils.getAttribute(arr[x], 'href');
 						if(url){
 							url = modules.url.resolve(url, this.options.baseUrl );
 						}
 					}
-	
-					
+
+
 					// add to rel-urls
 					var relUrl = this.getRelProperties(arr[x]);
 					relUrl.rels = items;
 					// // do not add duplicate rel-urls - based on resolved URLs
 					if(url && out['rel-urls'][url] === undefined){
 						out['rel-urls'][url] = relUrl;
 					}
-	
-			
+
+
 				}
 				x++;
 			}
 			return out;
 		};
-		
-		
+
+
 		/**
 		 * gets the properties of a rel=*
 		 *
 		 * @param  {DOM node} node
 		 * @return {Object}
 		 */
 		modules.Parser.prototype.getRelProperties = function(node){
 			var obj = {};
-			
+
 			if(modules.domUtils.hasAttribute(node, 'media')){
 				obj.media = modules.domUtils.getAttribute(node, 'media');
 			}
 			if(modules.domUtils.hasAttribute(node, 'type')){
 				obj.type = modules.domUtils.getAttribute(node, 'type');
 			}
 			if(modules.domUtils.hasAttribute(node, 'hreflang')){
 				obj.hreflang = modules.domUtils.getAttribute(node, 'hreflang');
 			}
 			if(modules.domUtils.hasAttribute(node, 'title')){
 				obj.title = modules.domUtils.getAttribute(node, 'title');
 			}
 			if(modules.utils.trim(this.getPValue(node, false)) !== ''){
 				obj.text = this.getPValue(node, false);
-			}	
-			
+			}
+
 			return obj;
 		};
-		
-		
+
+
 		/**
 		 * finds any alt rel=* mappings for a given node/microformat
 		 *
 		 * @param  {DOM node} node
 		 * @param  {String} ufName
 		 * @return {String || undefined}
 		 */
 		modules.Parser.prototype.findRelImpied = function(node, ufName) {
 			var out,
 				map,
 				i;
-	
+
 			map = this.getMapping(ufName);
 			if(map) {
 				for(var key in map.properties) {
 					if (map.properties.hasOwnProperty(key)) {
 						var prop = map.properties[key],
 							propName = (prop.map) ? prop.map : 'p-' + key,
 							relCount = 0;
-		
-						// is property an alt rel=* mapping 
+
+						// is property an alt rel=* mapping
 						if(prop.relAlt && modules.domUtils.hasAttribute(node, 'rel')) {
 							i = prop.relAlt.length;
 							while(i--) {
 								if(modules.domUtils.hasAttributeValue(node, 'rel', prop.relAlt[i])) {
 									relCount++;
 								}
 							}
 							if(relCount === prop.relAlt.length) {
 								out = propName;
 							}
 						}
 					}
 				}
 			}
 			return out;
 		};
-		
-		
+
+
 		/**
 		 * returns whether a node or its children has rel=* microformat
 		 *
 		 * @param  {DOM node} node
 		 * @return {Boolean}
 		 */
 		modules.Parser.prototype.hasRel = function(node) {
 			return (this.countRels(node) > 0);
 		};
-		
-		
+
+
 		/**
 		 * returns the number of rel=* microformats
 		 *
 		 * @param  {DOM node} node
 		 * @return {Int}
 		 */
 		modules.Parser.prototype.countRels = function(node) {
 			if(node){
 				return modules.domUtils.getNodesByAttribute(node, 'rel').length;
 			}
 			return 0;
 		};
-	
-	
-		
+
+
+
 	}
 
 
 	modules.utils = {
-		
+
 		/**
 		 * is the object a string
 		 *
 		 * @param  {Object} obj
 		 * @return {Boolean}
 		 */
 		isString: function( obj ) {
 			return typeof( obj ) === 'string';
 		},
-		
+
 		/**
 		 * is the object a number
 		 *
 		 * @param  {Object} obj
 		 * @return {Boolean}
 		 */
 		isNumber: function( obj ) {
 			return !isNaN(parseFloat( obj )) && isFinite( obj );
 		},
-		
-		
+
+
 		/**
 		 * is the object an array
 		 *
 		 * @param  {Object} obj
 		 * @return {Boolean}
 		 */
 		isArray: function( obj ) {
 			return obj && !( obj.propertyIsEnumerable( 'length' ) ) && typeof obj === 'object' && typeof obj.length === 'number';
 		},
-		
-		
+
+
 		/**
 		 * is the object a function
 		 *
 		 * @param  {Object} obj
 		 * @return {Boolean}
 		 */
 		isFunction: function(obj) {
 			return !!(obj && obj.constructor && obj.call && obj.apply);
 		},
-	
-	
+
+
 		/**
 		 * does the text start with a test string
 		 *
 		 * @param  {String} text
 		 * @param  {String} test
 		 * @return {Boolean}
 		 */
 		startWith: function( text, test ) {
 			return(text.indexOf(test) === 0);
 		},
-	
-		
+
+
 		/**
 		 * removes spaces at front and back of text
 		 *
 		 * @param  {String} text
 		 * @return {String}
 		 */
 		trim: function( text ) {
 			if(text && this.isString(text)){
 				return (text.trim())? text.trim() : text.replace(/^\s+|\s+$/g, '');
 			}else{
 				return '';
 			}
 		},
-		
-		
+
+
 		/**
 		 * replaces a character in text
 		 *
 		 * @param  {String} text
 		 * @param  {Int} index
 		 * @param  {String} character
 		 * @return {String}
 		 */
 		replaceCharAt: function( text, index, character ) {
 			if(text && text.length > index){
-			   return text.substr(0, index) + character + text.substr(index+character.length); 
+			   return text.substr(0, index) + character + text.substr(index+character.length);
 			}else{
 				return text;
 			}
 		},
-		
-		
+
+
 		/**
 		 * removes whitespace, tabs and returns from start and end of text
 		 *
 		 * @param  {String} text
 		 * @return {String}
 		 */
 		trimWhitespace: function( text ){
 			if(text && text.length){
 				var i = text.length,
 					x = 0;
-				
+
 				// turn all whitespace chars at end into spaces
 				while (i--) {
 					if(this.isOnlyWhiteSpace(text[i])){
 						text = this.replaceCharAt( text, i, ' ' );
 					}else{
 						break;
 					}
 				}
-				
+
 				// turn all whitespace chars at start into spaces
 				i = text.length;
 				while (x < i) {
 					if(this.isOnlyWhiteSpace(text[x])){
 						text = this.replaceCharAt( text, i, ' ' );
 					}else{
 						break;
 					}
 					x++;
 				}
 			}
 			return this.trim(text);
 		},
-	
-	
+
+
 		/**
 		 * does text only contain whitespace characters
 		 *
 		 * @param  {String} text
 		 * @return {Boolean}
 		 */
 		isOnlyWhiteSpace: function( text ){
 			return !(/[^\t\n\r ]/.test( text ));
 		},
-		
-		
+
+
 		/**
 		 * removes whitespace from text (leaves a single space)
 		 *
 		 * @param  {String} text
 		 * @return {Sring}
 		 */
 		collapseWhiteSpace: function( text ){
 			return text.replace(/[\t\n\r ]+/g, ' ');
 		},
-	
-	
+
+
 		/**
 		 * does an object have any of its own properties
 		 *
 		 * @param  {Object} obj
 		 * @return {Boolean}
-		 */ 
+		 */
 		hasProperties: function( obj ) {
 			var key;
 			for(key in obj) {
 				if( obj.hasOwnProperty( key ) ) {
 					return true;
 				}
 			}
 			return false;
 		},
-		
-		
+
+
 		/**
 		 * a sort function - to sort objects in an array by a given property
 		 *
 		 * @param  {String} property
 		 * @param  {Boolean} reverse
 		 * @return {Int}
-		 */ 
+		 */
 		sortObjects: function(property, reverse) {
 			reverse = (reverse) ? -1 : 1;
 			return function (a, b) {
 				a = a[property];
 				b = b[property];
 				if (a < b) {
 					return reverse * -1;
 				}
 				if (a > b) {
 					return reverse * 1;
 				}
 				return 0;
 			};
 		}
-		
+
 	};
 
 
 	modules.domUtils = {
 
 		// blank objects for DOM
 		document: null,
 		rootNode: null,
@@ -3053,320 +3053,320 @@ var Microformats; // jshint ignore:line
 
 	/**
 	 * constructor
 	 * parses text to find just the date element of an ISO date/time string i.e. 2008-05-01
 	 *
 	 * @param  {String} dateString
 	 * @param  {String} format
 	 * @return {String}
-	 */ 
+	 */
 	modules.ISODate = function ( dateString, format ) {
 		this.clear();
-	
+
 		this.format = (format)? format : 'auto'; // auto or W3C or RFC3339 or HTML5
 		this.setFormatSep();
-	
-		// optional should be full iso date/time string 
+
+		// optional should be full iso date/time string
 		if(arguments[0]) {
 			this.parse(dateString, format);
 		}
 	};
-	
+
 
 	modules.ISODate.prototype = {
-		
-		
+
+
 		/**
 		 * clear all states
 		 *
-		 */ 
+		 */
 		clear: function(){
 			this.clearDate();
 			this.clearTime();
 			this.clearTimeZone();
 			this.setAutoProfileState();
 		},
-		
-		
+
+
 		/**
 		 * clear date states
 		 *
-		 */ 
+		 */
 		clearDate: function(){
 			this.dY = -1;
 			this.dM = -1;
 			this.dD = -1;
 			this.dDDD = -1;
 		},
-		
-		
+
+
 		/**
 		 * clear time states
 		 *
-		 */ 
+		 */
 		clearTime: function(){
 			this.tH = -1;
 			this.tM = -1;
 			this.tS = -1;
 			this.tD = -1;
 		},
-		
-		
+
+
 		/**
 		 * clear timezone states
 		 *
-		 */ 
+		 */
 		clearTimeZone: function(){
 			this.tzH = -1;
 			this.tzM = -1;
 			this.tzPN = '+';
 			this.z = false;
 		},
-		
-		
+
+
 		/**
 		 * resets the auto profile state
 		 *
-		 */ 
+		 */
 		setAutoProfileState: function(){
 			this.autoProfile = {
 			   sep: 'T',
 			   dsep: '-',
 			   tsep: ':',
 			   tzsep: ':',
 			   tzZulu: 'Z'
 			};
 		},
-		
-	  
+
+
 		/**
 		 * parses text to find ISO date/time string i.e. 2008-05-01T15:45:19Z
 		 *
 		 * @param  {String} dateString
 		 * @param  {String} format
 		 * @return {String}
-		 */ 
+		 */
 		parse: function( dateString, format ) {
 			this.clear();
-			
+
 			var parts = [],
 				tzArray = [],
 				position = 0,
 				datePart = '',
 				timePart = '',
 				timeZonePart = '';
-				
+
 			if(format){
 				this.format = format;
 			}
-			
-	
-			
+
+
+
 			// discover date time separtor for auto profile
 			// Set to 'T' by default
 			if(dateString.indexOf('t') > -1) {
 				this.autoProfile.sep = 't';
 			}
 			if(dateString.indexOf('z') > -1) {
 				this.autoProfile.tzZulu = 'z';
 			}
 			if(dateString.indexOf('Z') > -1) {
 				this.autoProfile.tzZulu = 'Z';
 			}
 			if(dateString.toUpperCase().indexOf('T') === -1) {
 				this.autoProfile.sep = ' ';
-			}     
-	
-	
+			}
+
+
 			dateString = dateString.toUpperCase().replace(' ','T');
-	
+
 			// break on 'T' divider or space
 			if(dateString.indexOf('T') > -1) {
 				parts = dateString.split('T');
 				datePart = parts[0];
 				timePart = parts[1];
-	
-				// zulu UTC                 
+
+				// zulu UTC
 				if(timePart.indexOf( 'Z' ) > -1) {
 					this.z = true;
 				}
-	
+
 				// timezone
 				if(timePart.indexOf( '+' ) > -1 || timePart.indexOf( '-' ) > -1) {
 					tzArray = timePart.split( 'Z' ); // incase of incorrect use of Z
 					timePart = tzArray[0];
 					timeZonePart = tzArray[1];
-	
+
 					// timezone
 					if(timePart.indexOf( '+' ) > -1 || timePart.indexOf( '-' ) > -1) {
 						position = 0;
-	
+
 						if(timePart.indexOf( '+' ) > -1) {
 							position = timePart.indexOf( '+' );
 						} else {
 							position = timePart.indexOf( '-' );
 						}
-	
+
 						timeZonePart = timePart.substring( position, timePart.length );
 						timePart = timePart.substring( 0, position );
 					}
 				}
-	
+
 			} else {
 				datePart = dateString;
 			}
-	
+
 			if(datePart !== '') {
 				this.parseDate( datePart );
 				if(timePart !== '') {
 					this.parseTime( timePart );
 					if(timeZonePart !== '') {
 						this.parseTimeZone( timeZonePart );
 					}
 				}
 			}
 			return this.toString( format );
 		},
-	
-		
+
+
 		/**
 		 * parses text to find just the date element of an ISO date/time string i.e. 2008-05-01
 		 *
 		 * @param  {String} dateString
 		 * @param  {String} format
 		 * @return {String}
-		 */ 
+		 */
 		parseDate: function( dateString, format ) {
 			this.clearDate();
-			
+
 			var parts = [];
-				
+
 			// discover timezone separtor for auto profile // default is ':'
 			if(dateString.indexOf('-') === -1) {
 				this.autoProfile.tsep = '';
-			}  
-	
+			}
+
 			// YYYY-DDD
 			parts = dateString.match( /(\d\d\d\d)-(\d\d\d)/ );
 			if(parts) {
 				if(parts[1]) {
 					this.dY = parts[1];
 				}
 				if(parts[2]) {
 					this.dDDD = parts[2];
 				}
 			}
-	
+
 			if(this.dDDD === -1) {
 				// YYYY-MM-DD ie 2008-05-01 and YYYYMMDD ie 20080501
 				parts = dateString.match( /(\d\d\d\d)?-?(\d\d)?-?(\d\d)?/ );
 				if(parts[1]) {
 					this.dY = parts[1];
 				}
 				if(parts[2]) {
 					this.dM = parts[2];
 				}
 				if(parts[3]) {
 					this.dD = parts[3];
 				}
 			}
 			return this.toString(format);
 		},
-	
-	
+
+
 		/**
 		 * parses text to find just the time element of an ISO date/time string i.e. 13:30:45
 		 *
 		 * @param  {String} timeString
 		 * @param  {String} format
 		 * @return {String}
-		 */ 
+		 */
 		parseTime: function( timeString, format ) {
 			this.clearTime();
 			var parts = [];
-				
+
 			// discover date separtor for auto profile // default is ':'
 			if(timeString.indexOf(':') === -1) {
 				this.autoProfile.tsep = '';
-			}      
-	
+			}
+
 			// finds timezone HH:MM:SS and HHMMSS  ie 13:30:45, 133045 and 13:30:45.0135
 			parts = timeString.match( /(\d\d)?:?(\d\d)?:?(\d\d)?.?([0-9]+)?/ );
 			if(parts[1]) {
 				this.tH = parts[1];
 			}
 			if(parts[2]) {
 				this.tM = parts[2];
 			}
 			if(parts[3]) {
 				this.tS = parts[3];
 			}
 			if(parts[4]) {
 				this.tD = parts[4];
 			}
 			return this.toTimeString(format);
 		},
-	
-		
+
+
 		/**
 		 * parses text to find just the time element of an ISO date/time string i.e. +08:00
 		 *
 		 * @param  {String} timeString
 		 * @param  {String} format
 		 * @return {String}
-		 */ 
+		 */
 		parseTimeZone: function( timeString, format ) {
 			this.clearTimeZone();
 			var parts = [];
-			
+
 			if(timeString.toLowerCase() === 'z'){
 				this.z = true;
 				// set case for z
 				this.autoProfile.tzZulu = (timeString === 'z')? 'z' : 'Z';
 			}else{
-				
+
 				// discover timezone separtor for auto profile // default is ':'
 				if(timeString.indexOf(':') === -1) {
 					this.autoProfile.tzsep = '';
-				}   
-			   
+				}
+
 				// finds timezone +HH:MM and +HHMM  ie +13:30 and +1330
 				parts = timeString.match( /([\-\+]{1})?(\d\d)?:?(\d\d)?/ );
 				if(parts[1]) {
 					this.tzPN = parts[1];
 				}
 				if(parts[2]) {
 					this.tzH = parts[2];
 				}
 				if(parts[3]) {
 					this.tzM = parts[3];
-				} 
-				
-	  
+				}
+
+
 			}
-			this.tzZulu = 'z';    
+			this.tzZulu = 'z';
 			return this.toTimeString( format );
 		},
-		
-		
+
+
 		/**
 		 * returns ISO date/time string in W3C Note, RFC 3339, HTML5, or auto profile
 		 *
 		 * @param  {String} format
 		 * @return {String}
-		 */ 
+		 */
 		toString: function( format ) {
 			var output = '';
-	
+
 			if(format){
 				this.format = format;
 			}
 			this.setFormatSep();
-	
+
 			if(this.dY  > -1) {
 				output = this.dY;
 				if(this.dM > 0 && this.dM < 13) {
 					output += this.dsep + this.dM;
 					if(this.dD > 0 && this.dD < 32) {
 						output += this.dsep + this.dD;
 						if(this.tH > -1 && this.tH < 25) {
 							output += this.sep + this.toTimeString( format );
@@ -3374,73 +3374,73 @@ var Microformats; // jshint ignore:line
 					}
 				}
 				if(this.dDDD > -1) {
 					output += this.dsep + this.dDDD;
 				}
 			} else if(this.tH > -1) {
 				output += this.toTimeString( format );
 			}
-	
+
 			return output;
 		},
-	
-	
+
+
 		/**
 		 * returns just the time string element of an ISO date/time
 		 * in W3C Note, RFC 3339, HTML5, or auto profile
 		 *
 		 * @param  {String} format
 		 * @return {String}
-		 */ 
+		 */
 		toTimeString: function( format ) {
 			var out = '';
-	
+
 			if(format){
 				this.format = format;
 			}
 			this.setFormatSep();
-			
+
 			// time can only be created with a full date
 			if(this.tH) {
 				if(this.tH > -1 && this.tH < 25) {
 					out += this.tH;
 					if(this.tM > -1 && this.tM < 61){
 						out += this.tsep + this.tM;
 						if(this.tS > -1 && this.tS < 61){
 							out += this.tsep + this.tS;
 							if(this.tD > -1){
 								out += '.' + this.tD;
 							}
 						}
 					}
-					
-					
-			  
-					// time zone offset 
+
+
+
+					// time zone offset
 					if(this.z) {
 						out += this.tzZulu;
 					} else {
 						if(this.tzH && this.tzH > -1 && this.tzH < 25) {
 							out += this.tzPN + this.tzH;
 							if(this.tzM > -1 && this.tzM < 61){
 								out += this.tzsep + this.tzM;
 							}
 						}
 					}
 				}
 			}
 			return out;
 		},
-	
-	
+
+
 		/**
 		 * set the current profile to W3C Note, RFC 3339, HTML5, or auto profile
 		 *
-		 */ 
+		 */
 		setFormatSep: function() {
 			switch( this.format.toLowerCase() ) {
 				case 'rfc3339':
 					this.sep = 'T';
 					this.dsep = '';
 					this.tsep = '';
 					this.tzsep = '';
 					this.tzZulu = 'Z';
@@ -3463,327 +3463,327 @@ var Microformats; // jshint ignore:line
 					// auto - defined by format of input string
 					this.sep = this.autoProfile.sep;
 					this.dsep = this.autoProfile.dsep;
 					this.tsep = this.autoProfile.tsep;
 					this.tzsep = this.autoProfile.tzsep;
 					this.tzZulu = this.autoProfile.tzZulu;
 			}
 		},
-	
-	
+
+
 		/**
 		 * does current data contain a full date i.e. 2015-03-23
 		 *
 		 * @return {Boolean}
-		 */ 
+		 */
 		hasFullDate: function() {
 			return(this.dY !== -1 && this.dM !== -1 && this.dD !== -1);
 		},
-	
-	
+
+
 		/**
 		 * does current data contain a minimum date which is just a year number i.e. 2015
 		 *
 		 * @return {Boolean}
-		 */ 
+		 */
 		hasDate: function() {
 			return(this.dY !== -1);
 		},
-	
-	
+
+
 		/**
 		 * does current data contain a minimum time which is just a hour number i.e. 13
 		 *
 		 * @return {Boolean}
-		 */     
+		 */
 		hasTime: function() {
 			return(this.tH !== -1);
 		},
-	
+
 		/**
 		 * does current data contain a minimum timezone i.e. -1 || +1 || z
 		 *
 		 * @return {Boolean}
-		 */    
+		 */
 		hasTimeZone: function() {
 			return(this.tzH !== -1);
 		}
-	
+
 	};
-	
+
 	modules.ISODate.prototype.constructor = modules.ISODate;
 
 
 	modules.dates = {
 
-		
+
 		/**
 		 * does text contain am
 		 *
 		 * @param  {String} text
 		 * @return {Boolean}
 		 */
 		hasAM: function( text ) {
 			text = text.toLowerCase();
 			return(text.indexOf('am') > -1 || text.indexOf('a.m.') > -1);
 		},
-	
-	
+
+
 		/**
 		 * does text contain pm
 		 *
 		 * @param  {String} text
 		 * @return {Boolean}
 		 */
 		hasPM: function( text ) {
 			text = text.toLowerCase();
 			return(text.indexOf('pm') > -1 || text.indexOf('p.m.') > -1);
 		},
-	
-	
+
+
 		/**
 		 * remove am and pm from text and return it
 		 *
 		 * @param  {String} text
 		 * @return {String}
 		 */
 		removeAMPM: function( text ) {
 			return text.replace('pm', '').replace('p.m.', '').replace('am', '').replace('a.m.', '');
 		},
-	
-	   
+
+
 	   /**
 		 * simple test of whether ISO date string is a duration  i.e.  PY17M or PW12
 		 *
 		 * @param  {String} text
 		 * @return {Boolean}
 		 */
 		isDuration: function( text ) {
 			if(modules.utils.isString( text )){
 				text = text.toLowerCase();
 				if(modules.utils.startWith(text, 'p') ){
 					return true;
 				}
 			}
 			return false;
 		},
-	
-	
+
+
 	   /**
 		 * is text a time or timezone
 		 * i.e. HH-MM-SS or z+-HH-MM-SS 08:43 | 15:23:00:0567 | 10:34pm | 10:34 p.m. | +01:00:00 | -02:00 | z15:00 | 0843
 		 *
 		 * @param  {String} text
 		 * @return {Boolean}
-		 */ 
+		 */
 		isTime: function( text ) {
 			if(modules.utils.isString(text)){
 				text = text.toLowerCase();
 				text = modules.utils.trim( text );
 				// start with timezone char
 				if( text.match(':') && ( modules.utils.startWith(text, 'z') || modules.utils.startWith(text, '-')  || modules.utils.startWith(text, '+') )) {
 					return true;
 				}
 				// has ante meridiem or post meridiem
-				if( text.match(/^[0-9]/) && 
+				if( text.match(/^[0-9]/) &&
 					( this.hasAM(text) || this.hasPM(text) )) {
 					return true;
 				}
 				// contains time delimiter but not datetime delimiter
 				if( text.match(':') && !text.match(/t|\s/) ) {
 					return true;
 				}
-				
+
 				// if it's a number of 2, 4 or 6 chars
 				if(modules.utils.isNumber(text)){
 					if(text.length === 2 || text.length === 4 || text.length === 6){
 						return true;
 					}
 				}
 			}
 			return false;
 		},
-	
+
 
 		/**
 		 * parses a time from text and returns 24hr time string
 		 * i.e. 5:34am = 05:34:00 and 1:52:04p.m. = 13:52:04
 		 *
 		 * @param  {String} text
 		 * @return {String}
-		 */ 
+		 */
 		parseAmPmTime: function( text ) {
 			var out = text,
 				times = [];
-	
+
 			// if the string has a text : or am or pm
 			if(modules.utils.isString(out)) {
 				//text = text.toLowerCase();
 				text = text.replace(/[ ]+/g, '');
-	
+
 				if(text.match(':') || this.hasAM(text) || this.hasPM(text)) {
-	
+
 					if(text.match(':')) {
 						times = text.split(':');
 					} else {
 						// single number text i.e. 5pm
 						times[0] = text;
 						times[0] = this.removeAMPM(times[0]);
 					}
-					
+
 					// change pm hours to 24hr number
 					if(this.hasPM(text)) {
 						if(times[0] < 12) {
 							times[0] = parseInt(times[0], 10) + 12;
 						}
 					}
-	
+
 					// add leading zero's where needed
 					if(times[0] && times[0].length === 1) {
 						times[0] = '0' + times[0];
 					}
-					
+
 					// rejoin text elements together
 					if(times[0]) {
 						text = times.join(':');
 					}
 				}
 			}
-			
+
 			// remove am/pm strings
 			return this.removeAMPM(text);
 		},
-	
-	
+
+
 	   /**
 		 * overlays a time on a date to return the union of the two
 		 *
 		 * @param  {String} date
 		 * @param  {String} time
 		 * @param  {String} format ( Modules.ISODate profile format )
 		 * @return {Object} Modules.ISODate
-		 */ 
+		 */
 		dateTimeUnion: function(date, time, format) {
 			var isodate = new modules.ISODate(date, format),
 				isotime = new modules.ISODate();
-	
+
 			isotime.parseTime(this.parseAmPmTime(time), format);
 			if(isodate.hasFullDate() && isotime.hasTime()) {
 				isodate.tH = isotime.tH;
 				isodate.tM = isotime.tM;
 				isodate.tS = isotime.tS;
 				isodate.tD = isotime.tD;
 				return isodate;
 			} else {
 				if(isodate.hasFullDate()){
 					return isodate;
 				}
 				return new modules.ISODate();
 			}
 		},
-	
-	
+
+
 	   /**
 		 * concatenate an array of date and time text fragments to create an ISODate object
 		 * used for microformat value and value-title rules
 		 *
 		 * @param  {Array} arr ( Array of Strings )
 		 * @param  {String} format ( Modules.ISODate profile format )
 		 * @return {Object} Modules.ISODate
-		 */ 
+		 */
 		concatFragments: function (arr, format) {
 			var out = new modules.ISODate(),
 				i = 0,
 				value = '';
-			
-			// if the fragment already contains a full date just return it once 
+
+			// if the fragment already contains a full date just return it once
 			if(arr[0].toUpperCase().match('T')) {
 				return new modules.ISODate(arr[0], format);
 			}else{
 				for(i = 0; i < arr.length; i++) {
 				value = arr[i];
-	  
+
 				// date pattern
 				if( value.charAt(4) === '-' && out.hasFullDate() === false ){
 					out.parseDate(value);
 				}
-				
+
 				// time pattern
 				if( (value.indexOf(':') > -1 || modules.utils.isNumber( this.parseAmPmTime(value) )) && out.hasTime() === false ) {
 					// split time and timezone
 					var items = this.splitTimeAndZone(value);
 					value = items[0];
-					
+
 					// parse any use of am/pm
 					value = this.parseAmPmTime(value);
 					out.parseTime(value);
-					
-					// parse any timezone 
+
+					// parse any timezone
 					if(items.length > 1){
 						 out.parseTimeZone(items[1], format);
 					}
 				}
-				
+
 				// timezone pattern
 				if(value.charAt(0) === '-' || value.charAt(0) === '+' || value.toUpperCase() === 'Z') {
 					if( out.hasTimeZone() === false ){
 						out.parseTimeZone(value);
 					}
 				}
-	
+
 			}
 			return out;
-				
+
 			}
 		},
-		
-		
+
+
 	   /**
 		 * parses text by splitting it into an array of time and timezone strings
 		 *
 		 * @param  {String} text
 		 * @return {Array} Modules.ISODate
-		 */ 
+		 */
 		splitTimeAndZone: function ( text ){
 		   var out = [text],
 			   chars = ['-','+','z','Z'],
 			   i = chars.length;
-			   
+
 			while (i--) {
 			  if(text.indexOf(chars[i]) > -1){
 				  out[0] = text.slice( 0, text.indexOf(chars[i]) );
 				  out.push( text.slice( text.indexOf(chars[i]) ) );
 				  break;
 			   }
 			}
 		   return out;
 		}
-		
+
 	};
 
 
 	modules.text = {
-		
+
 		// normalised or whitespace or whitespacetrimmed
-		textFormat: 'whitespacetrimmed', 
-		
+		textFormat: 'whitespacetrimmed',
+
 		// block level tags, used to add line returns
 		blockLevelTags: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'hr', 'pre', 'table',
-			'address', 'article', 'aside', 'blockquote', 'caption', 'col', 'colgroup', 'dd', 'div', 
-			'dt', 'dir', 'fieldset', 'figcaption', 'figure', 'footer', 'form',  'header', 'hgroup', 'hr', 
-			'li', 'map', 'menu', 'nav', 'optgroup', 'option', 'section', 'tbody', 'testarea', 
+			'address', 'article', 'aside', 'blockquote', 'caption', 'col', 'colgroup', 'dd', 'div',
+			'dt', 'dir', 'fieldset', 'figcaption', 'figure', 'footer', 'form',  'header', 'hgroup', 'hr',
+			'li', 'map', 'menu', 'nav', 'optgroup', 'option', 'section', 'tbody', 'testarea',
 			'tfoot', 'th', 'thead', 'tr', 'td', 'ul', 'ol', 'dl', 'details'],
 
-		// tags to exclude 
+		// tags to exclude
 		excludeTags: ['noframe', 'noscript', 'template', 'script', 'style', 'frames', 'frameset'],
- 
-	
+
+
 		/**
-		 * parses the text from the DOM Node 
+		 * parses the text from the DOM Node
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {String} textFormat
 		 * @return {String}
 		 */
 		parse: function(doc, node, textFormat){
 			var out;
 			this.textFormat = (textFormat)? textFormat : this.textFormat;
@@ -3793,199 +3793,199 @@ var Microformats; // jshint ignore:line
 					return this.normalise( doc, out );
 				}else{
 					return '';
 				}
 			}else{
 			   return this.formatText( doc, modules.domUtils.textContent(node), this.textFormat );
 			}
 		},
-		
-		
+
+
 		/**
-		 * parses the text from a html string 
+		 * parses the text from a html string
 		 *
 		 * @param  {DOM Document} doc
 		 * @param  {String} text
 		 * @param  {String} textFormat
 		 * @return {String}
-		 */  
+		 */
 		parseText: function( doc, text, textFormat ){
 		   var node = modules.domUtils.createNodeWithText( 'div', text );
 		   return this.parse( doc, node, textFormat );
 		},
-		
-		
+
+
 		/**
 		 * parses the text from a html string - only for whitespace or whitespacetrimmed formats
 		 *
 		 * @param  {String} text
 		 * @param  {String} textFormat
 		 * @return {String}
-		 */  
+		 */
 		formatText: function( doc, text, textFormat ){
 		   this.textFormat = (textFormat)? textFormat : this.textFormat;
 		   if(text){
 			  var out = '',
 				  regex = /(<([^>]+)>)/ig;
-				
-			  out = text.replace(regex, '');   
-			  if(this.textFormat === 'whitespacetrimmed') {    
+
+			  out = text.replace(regex, '');
+			  if(this.textFormat === 'whitespacetrimmed') {
 				 out = modules.utils.trimWhitespace( out );
 			  }
-			  
+
 			  //return entities.decode( out, 2 );
 			  return modules.domUtils.decodeEntities( doc, out );
 		   }else{
-			  return ''; 
+			  return '';
 		   }
 		},
-		
-		
+
+
 		/**
-		 * normalises whitespace in given text 
+		 * normalises whitespace in given text
 		 *
 		 * @param  {String} text
 		 * @return {String}
-		 */ 
+		 */
 		normalise: function( doc, text ){
 			text = text.replace( /&nbsp;/g, ' ') ;    // exchanges html entity for space into space char
 			text = modules.utils.collapseWhiteSpace( text );     // removes linefeeds, tabs and addtional spaces
 			text = modules.domUtils.decodeEntities( doc, text );  // decode HTML entities
 			text = text.replace( '–', '-' );          // correct dash decoding
 			return modules.utils.trim( text );
 		},
-		
-	 
+
+
 		/**
 		 * walks DOM tree parsing the text from DOM Nodes
 		 *
 		 * @param  {DOM Node} node
 		 * @return {String}
-		 */ 
+		 */
 		walkTreeForText: function( node ) {
 			var out = '',
 				j = 0;
-	
+
 			if(node.tagName && this.excludeTags.indexOf( node.tagName.toLowerCase() ) > -1){
 				return out;
 			}
-	
+
 			// if node is a text node get its text
 			if(node.nodeType && node.nodeType === 3){
-				out += modules.domUtils.getElementText( node ); 
+				out += modules.domUtils.getElementText( node );
 			}
-	
+
 			// get the text of the child nodes
 			if(node.childNodes && node.childNodes.length > 0){
 				for (j = 0; j < node.childNodes.length; j++) {
 					var text = this.walkTreeForText( node.childNodes[j] );
 					if(text !== undefined){
 						out += text;
 					}
 				}
 			}
-	
+
 			// if it's a block level tag add an additional space at the end
 			if(node.tagName && this.blockLevelTags.indexOf( node.tagName.toLowerCase() ) !== -1){
 				out += ' ';
-			} 
-			
+			}
+
 			return (out === '')? undefined : out ;
 		}
-		
+
 	};
 
 
 	modules.html = {
-		
+
 		// elements which are self-closing
 		selfClosingElt: ['area', 'base', 'br', 'col', 'hr', 'img', 'input', 'link', 'meta', 'param', 'command', 'keygen', 'source'],
-	
+
 
 		/**
 		 * parse the html string from DOM Node
 		 *
 		 * @param  {DOM Node} node
 		 * @return {String}
-		 */ 
+		 */
 		parse: function( node ){
 			var out = '',
 				j = 0;
-	
+
 			// we do not want the outer container
 			if(node.childNodes && node.childNodes.length > 0){
 				for (j = 0; j < node.childNodes.length; j++) {
 					var text = this.walkTreeForHtml( node.childNodes[j] );
 					if(text !== undefined){
 						out += text;
 					}
 				}
 			}
-	
+
 			return out;
 		},
-	
-  
+
+
 		/**
 		 * walks the DOM tree parsing the html string from the nodes
 		 *
 		 * @param  {DOM Document} doc
 		 * @param  {DOM Node} node
 		 * @return {String}
-		 */ 
+		 */
 		walkTreeForHtml: function( node ) {
 			var out = '',
 				j = 0;
-	
+
 			// if node is a text node get its text
 			if(node.nodeType && node.nodeType === 3){
-				out += modules.domUtils.getElementText( node ); 
+				out += modules.domUtils.getElementText( node );
 			}
-	
-		
-			// exclude text which has been added with include pattern  - 
+
+
+			// exclude text which has been added with include pattern  -
 			if(node.nodeType && node.nodeType === 1 && modules.domUtils.hasAttribute(node, 'data-include') === false){
-	
+
 				// begin tag
-				out += '<' + node.tagName.toLowerCase();  
-	
+				out += '<' + node.tagName.toLowerCase();
+
 				// add attributes
 				var attrs = modules.domUtils.getOrderedAttributes(node);
 				for (j = 0; j < attrs.length; j++) {
 					out += ' ' + attrs[j].name +  '=' + '"' + attrs[j].value + '"';
 				}
-	
+
 				if(this.selfClosingElt.indexOf(node.tagName.toLowerCase()) === -1){
 					out += '>';
 				}
-	
+
 				// get the text of the child nodes
 				if(node.childNodes && node.childNodes.length > 0){
-					
+
 					for (j = 0; j < node.childNodes.length; j++) {
 						var text = this.walkTreeForHtml( node.childNodes[j] );
 						if(text !== undefined){
 							out += text;
 						}
 					}
 				}
-	
+
 				// end tag
 				if(this.selfClosingElt.indexOf(node.tagName.toLowerCase()) > -1){
-					out += ' />'; 
+					out += ' />';
 				}else{
-					out += '</' + node.tagName.toLowerCase() + '>'; 
+					out += '</' + node.tagName.toLowerCase() + '>';
 				}
-			} 
-			
+			}
+
 			return (out === '')? undefined : out;
-		}    
-	
-	
+		}
+
+
 	};
 
 
 	modules.maps['h-adr'] = {
 		root: 'adr',
 		name: 'h-adr',
 		properties: {
 			'post-office-box': {},
@@ -4020,17 +4020,17 @@ var Microformats; // jshint ignore:line
 			'category': {
 				'map': 'p-category',
 				'relAlt': ['tag']
 			},
 			'email': {
 				'map': 'u-email'
 			},
 			'geo': {
-				'map': 'p-geo', 
+				'map': 'p-geo',
 				'uf': ['h-geo']
 			},
 			'key': {
 				'map': 'u-key'
 			},
 			'label': {},
 			'logo': {
 				'map': 'u-logo'
@@ -4087,38 +4087,38 @@ var Microformats; // jshint ignore:line
 				'map': 'e-content'
 			},
 			'published': {
 				'map': 'dt-published'
 			},
 			'updated': {
 				'map': 'dt-updated'
 			},
-			'author': { 
+			'author': {
 				'uf': ['h-card']
 			},
 			'category': {
 				'map': 'p-category',
 				'relAlt': ['tag']
 			},
 			'geo': {
-				'map': 'p-geo', 
+				'map': 'p-geo',
 				'uf': ['h-geo']
 			},
 			'latitude': {},
 			'longitude': {},
 			'url': {
 				'map': 'u-url',
 				'relAlt': ['bookmark']
 			}
 		}
 	};
 
 
-	modules.maps['h-event'] = {  
+	modules.maps['h-event'] = {
 		root: 'vevent',
 		name: 'h-event',
 		properties: {
 			'summary': {
 				'map': 'p-name'
 			},
 			'dtstart': {
 				'map': 'dt-start'
@@ -4154,34 +4154,34 @@ var Microformats; // jshint ignore:line
 				'uf': ['h-card']},
 			'uid': {
 				'map': 'u-uid'
 			},
 			'attach': {
 				'map': 'u-attach'
 			},
 			'status': {},
-			'rdate': {}, 
+			'rdate': {},
 			'rrule': {}
 		}
 	};
 
 
 	modules.maps['h-feed'] = {
 		root: 'hfeed',
 		name: 'h-feed',
 		properties: {
 			'category': {
 				'map': 'p-category',
 				'relAlt': ['tag']
 			},
 			'summary': {
 				'map': 'p-summary'
 			},
-			'author': { 
+			'author': {
 				'uf': ['h-card']
 			},
 			'url': {
 				'map': 'u-url'
 			},
 			'photo': {
 				'map': 'u-photo'
 			},
@@ -4264,17 +4264,17 @@ var Microformats; // jshint ignore:line
 				},
 				'dateline': {
 					'uf': ['h-card']
 				},
 				'item-license': {
 					'map': 'u-item-license'
 				},
 				'principles': {
-					'map': 'u-principles', 
+					'map': 'u-principles',
 					'relAlt': ['principles']
 				}
 			}
 		};
 
 
 	modules.maps['h-org'] = {
 		root: 'h-x-org',  // drop this from v1 as it causes issue with fn org hcard pattern
@@ -4391,17 +4391,17 @@ var Microformats; // jshint ignore:line
 			},
 			'item': {
 				'map': 'p-item',
 				'uf': ['h-item', 'h-geo', 'h-adr', 'h-card', 'h-event', 'h-product']
 			},
 			'rating': {},
 			'average': {},
 			'best': {},
-			'worst': {},       
+			'worst': {},
 			'count': {},
 			'votes': {},
 			'category': {
 				'map': 'p-category',
 				'relAlt': ['tag']
 			},
 			'url': {
 				'map': 'u-url',
@@ -4443,106 +4443,106 @@ var Microformats; // jshint ignore:line
 				'relAlt': ['self', 'bookmark']
 			}
 		}
 	};
 
 
 	modules.rels = {
 		// xfn
-		'friend': [ 'yes','external'], 
-		'acquaintance': [ 'yes','external'],  
-		'contact': [ 'yes','external'], 
-		'met': [ 'yes','external'], 
-		'co-worker': [ 'yes','external'],  
-		'colleague': [ 'yes','external'], 
-		'co-resident': [ 'yes','external'],  
-		'neighbor': [ 'yes','external'], 
-		'child': [ 'yes','external'],  
-		'parent': [ 'yes','external'],  
-		'sibling': [ 'yes','external'],  
-		'spouse': [ 'yes','external'],  
-		'kin': [ 'yes','external'], 
-		'muse': [ 'yes','external'],  
-		'crush': [ 'yes','external'],  
-		'date': [ 'yes','external'],  
-		'sweetheart': [ 'yes','external'], 
-		'me': [ 'yes','external'], 
-	
-		// other rel=* 
+		'friend': [ 'yes','external'],
+		'acquaintance': [ 'yes','external'],
+		'contact': [ 'yes','external'],
+		'met': [ 'yes','external'],
+		'co-worker': [ 'yes','external'],
+		'colleague': [ 'yes','external'],
+		'co-resident': [ 'yes','external'],
+		'neighbor': [ 'yes','external'],
+		'child': [ 'yes','external'],
+		'parent': [ 'yes','external'],
+		'sibling': [ 'yes','external'],
+		'spouse': [ 'yes','external'],
+		'kin': [ 'yes','external'],
+		'muse': [ 'yes','external'],
+		'crush': [ 'yes','external'],
+		'date': [ 'yes','external'],
+		'sweetheart': [ 'yes','external'],
+		'me': [ 'yes','external'],
+
+		// other rel=*
 		'license': [ 'yes','yes'],
 		'nofollow': [ 'no','external'],
 		'tag': [ 'no','yes'],
 		'self': [ 'no','external'],
 		'bookmark': [ 'no','external'],
 		'author': [ 'no','external'],
 		'home': [ 'no','external'],
 		'directory': [ 'no','external'],
 		'enclosure': [ 'no','external'],
 		'pronunciation': [ 'no','external'],
 		'payment': [ 'no','external'],
 		'principles': [ 'no','external']
-	
+
 	};
 
 
 
     var External = {
         version: modules.version,
         livingStandard: modules.livingStandard
     };
-    
-    
+
+
     External.get = function(options){
     	var parser = new modules.Parser();
         addV1(parser, options);
     	return parser.get( options );
     };
-    
-    
+
+
     External.getParent = function(node, options){
     	var parser = new modules.Parser();
         addV1(parser, options);
     	return parser.getParent( node, options );
     };
-    
-    
+
+
     External.count = function(options){
     	var parser = new modules.Parser();
         addV1(parser, options);
     	return parser.count( options );
     };
-    
-    
+
+
     External.isMicroformat = function( node, options ){
     	var parser = new modules.Parser();
         addV1(parser, options);
     	return parser.isMicroformat( node, options );
     };
-    
-    
+
+
     External.hasMicroformats = function( node, options ){
     	var parser = new modules.Parser();
         addV1(parser, options);
     	return parser.hasMicroformats( node, options );
     };
-    
-    
+
+
     function addV1(parser, options){
 		if(options && options.maps){
 			if(Array.isArray(options.maps)){
 				parser.add(options.maps);
 			}else{
 				parser.add([options.maps]);
 			}
 		}
     }
-    
-    
+
+
     return External;
-    
-    
+
+
 }));
 try {
     // mozilla jsm support
     Components.utils.importGlobalProperties(["URL"]);
 } catch(e) {}
 this.EXPORTED_SYMBOLS = ['Microformats'];
--- a/toolkit/components/microformats/test/interface-tests/count-test.js
+++ b/toolkit/components/microformats/test/interface-tests/count-test.js
@@ -1,107 +1,107 @@
 /*
 Unit test for count
 */
 
 assert = chai.assert;
 
 
 describe('Microformat.count', function() {
-  
+
    it('count', function(){
-       
+
        var  doc,
             node,
             result;
-            
-        var html = '<a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a><a class="h-card" href="http://janedoe.net"><span class="p-name">Jane</span></a><a class="h-event" href="http://janedoe.net"><span class="p-name">Event</span><span class="dt-start">2015-07-01</span></a>';   
-            
-       
+
+        var html = '<a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a><a class="h-card" href="http://janedoe.net"><span class="p-name">Jane</span></a><a class="h-event" href="http://janedoe.net"><span class="p-name">Event</span><span class="dt-start">2015-07-01</span></a>';
+
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         node.innerHTML = html;
-        doc.body.appendChild(node);    
-        
+        doc.body.appendChild(node);
+
         options ={
             'node': node,
         };
 
         result = Microformats.count(options);
         assert.deepEqual( result, {'h-event': 1,'h-card': 2} );
-        
+
    });
-   
-   
+
+
     it('count rels', function(){
-       
+
        var  doc,
             node,
             result;
-            
-        var html = '<link href="http://glennjones.net/notes/atom" rel="notes alternate" title="Notes" type="application/atom+xml" /><a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a><a class="h-card" href="http://janedoe.net"><span class="p-name">Jane</span></a><a class="h-event" href="http://janedoe.net"><span class="p-name">Event</span><span class="dt-start">2015-07-01</span></a>';   
-            
-       
+
+        var html = '<link href="http://glennjones.net/notes/atom" rel="notes alternate" title="Notes" type="application/atom+xml" /><a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a><a class="h-card" href="http://janedoe.net"><span class="p-name">Jane</span></a><a class="h-event" href="http://janedoe.net"><span class="p-name">Event</span><span class="dt-start">2015-07-01</span></a>';
+
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         node.innerHTML = html;
-        doc.body.appendChild(node);    
-        
+        doc.body.appendChild(node);
+
         options ={
             'node': node,
         };
 
         result = Microformats.count(options);
         assert.deepEqual( result, {'h-event': 1,'h-card': 2, 'rels': 1} );
-        
+
    });
-   
-     
+
+
    it('count - no results', function(){
-       
+
        var  doc,
             node,
             result;
-            
-        var html = '<span class="p-name">Jane</span>';   
-            
-       
+
+        var html = '<span class="p-name">Jane</span>';
+
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         node.innerHTML = html;
-        doc.body.appendChild(node);    
-        
+        doc.body.appendChild(node);
+
         options ={
             'node': node,
         };
 
         result = Microformats.count(options);
         assert.deepEqual( result, {} );
-        
+
    });
-   
-   
-   
+
+
+
    it('count - no options', function(){
-       
+
        var result;
-           
+
        result = Microformats.count({});
        assert.deepEqual( result, {} );
-        
+
    });
-   
-   
+
+
    it('count - options.html', function(){
-       
+
        var  options = {},
             result;
-            
-        options.html = '<a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a><a class="h-card" href="http://janedoe.net"><span class="p-name">Jane</span></a><a class="h-event" href="http://janedoe.net"><span class="p-name">Event</span><span class="dt-start">2015-07-01</span></a>';     
+
+        options.html = '<a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a><a class="h-card" href="http://janedoe.net"><span class="p-name">Jane</span></a><a class="h-event" href="http://janedoe.net"><span class="p-name">Event</span><span class="dt-start">2015-07-01</span></a>';
 
         result = Microformats.count(options);
         assert.deepEqual( result, {'h-event': 1,'h-card': 2} );
-        
+
    });
-   
-  
-   
+
+
+
  });
--- a/toolkit/components/microformats/test/interface-tests/experimental-test.js
+++ b/toolkit/components/microformats/test/interface-tests/experimental-test.js
@@ -3,35 +3,35 @@ Unit test for get
 */
 
 assert = chai.assert;
 
 
 describe('experimental', function() {
 
    it('h-geo - geo data writen as lat;lon', function(){
-       
+
         var expected = {
 				'items': [{
 					'type': ['h-geo'],
 					'properties': {
 						'name': ['30.267991;-97.739568'],
 						'latitude': [30.267991],
 						'longitude': [-97.739568]
 					}
 				}],
 				'rels': {},
 				'rel-urls': {}
-			},   
+			},
 			options = {
 				'html': '<div class="h-geo">30.267991;-97.739568</div>',
 				'baseUrl': 'http://example.com',
 				'dateFormat': 'html5',
 				'parseLatLonGeo': true
 			};
 
         var result = Microformats.get(options);
         assert.deepEqual( result, expected );
-        
+
    });
-   
-  
+
+
 });
--- a/toolkit/components/microformats/test/interface-tests/getParent-test.js
+++ b/toolkit/components/microformats/test/interface-tests/getParent-test.js
@@ -1,17 +1,17 @@
 /*
 Unit test for getParent
 */
 
 assert = chai.assert;
 
 
 describe('Microformat.getParent', function() {
-        
+
         var HTML = '<div class="h-event"><span class="p-name">Pub</span><span class="dt-start">2015-07-01t17:30z</span></div>';
         var emptyExpected = {
             "items": [],
             "rels": {},
             "rel-urls": {}
         };
         var expected = {
             "items": [
@@ -28,103 +28,103 @@ describe('Microformat.getParent', functi
                         ]
                     }
                 }
             ],
             "rels": {},
             "rel-urls": {}
         };
         var options = {'dateFormat': 'html5'};
-     
-        
-    
+
+
+
 
    it('getParent with parent', function(){
-       
+
        var  doc,
             node,
             span,
             result;
-           
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         node.innerHTML = HTML;
         doc.body.appendChild(node);
-        span = doc.querySelector('.dt-start');    
-        
+        span = doc.querySelector('.dt-start');
+
         result = Microformats.getParent(span,options);
         assert.deepEqual( result, expected );
-        
+
    });
-   
-   
-   
+
+
+
    it('getParent without parent', function(){
-       
+
        var  doc,
             node,
             parser,
             result;
-           
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         node.innerHTML = HTML;
         doc.body.appendChild(node);
-    
+
         result = Microformats.getParent(node,options);
         assert.deepEqual( result, emptyExpected );
-        
+
    });
-   
-   
+
+
    it('getParent found with option.filters', function(){
-       
+
        var  doc,
             node,
             span,
             result;
-           
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         node.innerHTML = HTML;
         doc.body.appendChild(node);
-        span = doc.querySelector('.dt-start');    
-        
+        span = doc.querySelector('.dt-start');
+
         result = Microformats.getParent( span, {'filters': ['h-event'], 'dateFormat': 'html5'} );
         assert.deepEqual( result, expected );
-        
+
    });
-   
-   
+
+
    it('getParent not found with option.filters', function(){
-       
+
        var  doc,
             node,
             span,
             result;
-           
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         node.innerHTML = HTML;
         doc.body.appendChild(node);
-        span = doc.querySelector('.dt-start');   
+        span = doc.querySelector('.dt-start');
 
         result = Microformats.getParent( span, {'filters': ['h-card'], 'dateFormat': 'html5'} );
         assert.deepEqual( result, emptyExpected );
-        
+
    });
-   
-   
+
+
    it('getParent use option.filters to up through h-*', function(){
-       
+
        var  doc,
             node,
             span,
             result;
-            
+
         var altHTML = '<div class="h-entry"><h1 class="p-name">test</h1><div class="e-content">this</div><a class="p-author h-card" href="http://glennjones.net"><span class="p-name">Glenn Jones</span></a><span class="dt-publish">2015-07-01t17:30z</span></div>';
         var altExpected = {
             "items": [
                 {
                     "type": [
                         "h-entry"
                     ],
                     "properties": {
@@ -157,64 +157,64 @@ describe('Microformat.getParent', functi
                             "2015-07-01 17:30Z"
                         ]
                     }
                 }
             ],
             "rels": {},
             "rel-urls": {}
         };
-     
-           
+
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         node.innerHTML = altHTML;
         doc.body.appendChild(node);
-        span = doc.querySelector('.h-card .p-name');    
-        
+        span = doc.querySelector('.h-card .p-name');
+
         result = Microformats.getParent( span, {'filters': ['h-entry'], 'dateFormat': 'html5'} );
         assert.deepEqual( result, altExpected );
-        
+
    });
-   
-   
+
+
    it('getParent stop at first h-* parent', function(){
-       
+
        var  doc,
             node,
             span,
             result;
-            
+
         var altHTML = '<div class="h-entry"><h1 class="p-name">test</h1><div class="e-content">this</div><a class="p-author h-card" href="http://glennjones.net"><span class="p-name">Glenn Jones</span></a><span class="dt-publish">2015-07-01t17:30z</span></div>';
         var altExpected = {
             "items": [
                     {
                         "type": [
                             "h-card"
                         ],
                         "properties": {
                             "name": [
                                 "Glenn Jones"
                             ],
                             "url": [
                                 "http://glennjones.net"
                             ]
                         }
-                    }   
+                    }
             ],
             "rels": {},
             "rel-urls": {}
         };
-     
-           
+
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         node.innerHTML = altHTML;
         doc.body.appendChild(node);
-        span = doc.querySelector('.h-card .p-name');    
-        
+        span = doc.querySelector('.h-card .p-name');
+
         result = Microformats.getParent( span, options );
         assert.deepEqual( result, altExpected );
-        
+
    });
-   
-   
+
+
 });
--- a/toolkit/components/microformats/test/interface-tests/hasMicroformats-test.js
+++ b/toolkit/components/microformats/test/interface-tests/hasMicroformats-test.js
@@ -1,185 +1,185 @@
 /*
 Unit test for hasMicroformat
 */
 
 assert = chai.assert;
 
 
 describe('Microformat.hasMicroformats', function() {
-  
+
    it('true - v2 on node', function(){
-       
+
        var  doc,
             node;
-            
-        var html = '<a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a>';   
-            
+
+        var html = '<a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a>';
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         doc.body.appendChild( node );
         node.innerHTML = html;
-        node = doc.querySelector( 'a' ); 
+        node = doc.querySelector( 'a' );
 
         assert.isTrue( Microformats.hasMicroformats( node ) );
-        
+
    });
-   
-   
+
+
    it('true - v1 on node', function(){
-       
+
        var  doc,
             node;
-            
-        var html = '<a class="vcard" href="http://glennjones.net"><span class="fn">Glenn</span></a>';   
-            
+
+        var html = '<a class="vcard" href="http://glennjones.net"><span class="fn">Glenn</span></a>';
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         doc.body.appendChild( node );
         node.innerHTML = html;
-        node = doc.querySelector( 'a' ); 
+        node = doc.querySelector( 'a' );
 
         assert.isTrue( Microformats.hasMicroformats( node ) );
-        
+
    });
-   
-   
+
+
    it('true - v2 filter on node', function(){
-       
+
        var  doc,
             node;
-            
-        var html = '<a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a>';   
-            
+
+        var html = '<a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a>';
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         doc.body.appendChild( node );
         node.innerHTML = html;
-        node = doc.querySelector( 'a' ); 
+        node = doc.querySelector( 'a' );
 
         assert.isTrue( Microformats.hasMicroformats( node, {'filters': ['h-card']} ) );
-        
+
    });
-   
-   
+
+
    it('true - v1 filter on node', function(){
-       
+
        var  doc,
             node;
-            
-        var html = '<a class="vcard" href="http://glennjones.net"><span class="fn">Glenn</span></a>';   
-            
+
+        var html = '<a class="vcard" href="http://glennjones.net"><span class="fn">Glenn</span></a>';
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         doc.body.appendChild( node );
         node.innerHTML = html;
-        node = doc.querySelector( 'a' ); 
+        node = doc.querySelector( 'a' );
 
         assert.isTrue( Microformats.hasMicroformats( node, {'filters': ['h-card']} ) );
-        
+
    });
-   
-   
+
+
    it('false - v2 filter on node', function(){
-       
+
        var  doc,
             node;
-            
-        var html = '<a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a>';   
-            
+
+        var html = '<a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a>';
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         doc.body.appendChild( node );
         node.innerHTML = html;
-        node = doc.querySelector( 'a' ); 
+        node = doc.querySelector( 'a' );
 
         assert.isFalse( Microformats.hasMicroformats( node, {'filters': ['h-entry']} ) );
-     
+
    });
-   
-   
-     
+
+
+
    it('false - property', function(){
-       
+
        var  doc,
             node,
             parser;
-            
-        var html = '<span class="p-name">Glenn</span>';   
-            
+
+        var html = '<span class="p-name">Glenn</span>';
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         doc.body.appendChild( node );
         node.innerHTML = html;
-        node = doc.querySelector( 'span' ); 
+        node = doc.querySelector( 'span' );
 
         assert.isFalse( Microformats.hasMicroformats( node ) );
-        
+
    });
-   
-   
+
+
    it('false - no class', function(){
-       
+
        var  doc,
             node,
             parser;
-            
-        var html = '<span>Glenn</span>';   
-            
+
+        var html = '<span>Glenn</span>';
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         doc.body.appendChild( node );
         node.innerHTML = html;
-        node = doc.querySelector( 'span' ); 
+        node = doc.querySelector( 'span' );
 
         assert.isFalse( Microformats.hasMicroformats( node ) );
-        
+
    });
-   
-   
+
+
    it('false - no node', function(){
         assert.isFalse( Microformats.hasMicroformats( ) );
    });
-   
-   
+
+
    it('false - undefined node', function(){
         assert.isFalse( Microformats.hasMicroformats( undefined ) );
    });
-   
-   
+
+
    it('true - child', function(){
-       
+
        var  doc,
             node;
-            
-        var html = '<section><div><a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a></div></section>';   
-            
+
+        var html = '<section><div><a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a></div></section>';
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         doc.body.appendChild( node );
         node.innerHTML = html;
 
         assert.isTrue( Microformats.hasMicroformats( node ) );
-        
+
    });
-   
-   
-   
+
+
+
    it('true - document', function(){
-       
+
        var  doc,
             node;
-            
-        var html = '<html><head></head><body><section><div><a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a></div></section></body></html>';   
-            
+
+        var html = '<html><head></head><body><section><div><a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a></div></section></body></html>';
+
         var dom = new DOMParser();
         doc = dom.parseFromString( html, 'text/html' );
 
         assert.isTrue( Microformats.hasMicroformats( doc ) );
-        
+
    });
-   
-  
-   
-   
-   
+
+
+
+
+
  });
--- a/toolkit/components/microformats/test/interface-tests/isMicroformat-test.js
+++ b/toolkit/components/microformats/test/interface-tests/isMicroformat-test.js
@@ -1,146 +1,146 @@
 /*
 Unit test for isMicroformat
 */
 
 assert = chai.assert;
 
 
 describe('Microformat.isMicroformat', function() {
-  
+
    it('true - v2', function(){
-       
+
        var  doc,
             node;
-            
-        var html = '<a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a>';   
-            
+
+        var html = '<a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a>';
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         doc.body.appendChild( node );
         node.innerHTML = html;
-        node = doc.querySelector( 'a' ); 
+        node = doc.querySelector( 'a' );
 
         assert.isTrue( Microformats.isMicroformat( node ) );
-        
+
    });
-   
-   
+
+
    it('true - v1', function(){
-       
+
        var  doc,
             node;
-            
-        var html = '<a class="vcard" href="http://glennjones.net"><span class="fn">Glenn</span></a>';   
-            
+
+        var html = '<a class="vcard" href="http://glennjones.net"><span class="fn">Glenn</span></a>';
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         doc.body.appendChild( node );
         node.innerHTML = html;
-        node = doc.querySelector( 'a' ); 
+        node = doc.querySelector( 'a' );
 
         assert.isTrue( Microformats.isMicroformat( node ) );
-        
+
    });
-   
-   
+
+
    it('true - v2 filter', function(){
-       
+
        var  doc,
             node;
-            
-        var html = '<a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a>';   
-            
+
+        var html = '<a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a>';
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         doc.body.appendChild( node );
         node.innerHTML = html;
-        node = doc.querySelector( 'a' ); 
+        node = doc.querySelector( 'a' );
 
         assert.isTrue( Microformats.isMicroformat( node, {'filters': ['h-card']} ) );
-        
+
    });
-   
-   
+
+
    it('true - v1 filter', function(){
-       
+
        var  doc,
             node;
-            
-        var html = '<a class="vcard" href="http://glennjones.net"><span class="fn">Glenn</span></a>';   
-            
+
+        var html = '<a class="vcard" href="http://glennjones.net"><span class="fn">Glenn</span></a>';
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         doc.body.appendChild( node );
         node.innerHTML = html;
-        node = doc.querySelector( 'a' ); 
+        node = doc.querySelector( 'a' );
 
         assert.isTrue( Microformats.isMicroformat( node, {'filters': ['h-card']} ) );
-        
+
    });
-   
-   
+
+
    it('false - v2 filter', function(){
-       
+
        var  doc,
             node;
-            
-        var html = '<a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a>';   
-            
+
+        var html = '<a class="h-card" href="http://glennjones.net"><span class="p-name">Glenn</span></a>';
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         doc.body.appendChild( node );
         node.innerHTML = html;
-        node = doc.querySelector( 'a' ); 
+        node = doc.querySelector( 'a' );
 
         assert.isFalse( Microformats.isMicroformat( node, {'filters': ['h-entry']} ) );
-        
+
    });
-   
-   
-     
+
+
+
    it('false - property', function(){
-       
+
        var  doc,
             node;
-            
-        var html = '<span class="p-name">Glenn</span>';   
-            
+
+        var html = '<span class="p-name">Glenn</span>';
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         doc.body.appendChild( node );
         node.innerHTML = html;
-        node = doc.querySelector( 'span' ); 
+        node = doc.querySelector( 'span' );
 
         assert.isFalse( Microformats.isMicroformat( node ) );
-        
+
    });
-   
-   
+
+
    it('false - no class', function(){
-       
+
        var  doc,
             node;
-            
-        var html = '<span>Glenn</span>';   
-            
+
+        var html = '<span>Glenn</span>';
+
         doc = document.implementation.createHTMLDocument('New Document');
         node =  document.createElement('div');
         doc.body.appendChild( node );
         node.innerHTML = html;
-        node = doc.querySelector( 'span' ); 
+        node = doc.querySelector( 'span' );
 
         assert.isFalse( Microformats.isMicroformat( node ) );
-        
+
    });
-   
-   
+
+
    it('false - no node', function(){
         assert.isFalse( Microformats.isMicroformat( ) );
    });
-   
-   
+
+
    it('false - undefined node', function(){
         assert.isFalse( Microformats.isMicroformat( undefined ) );
    });
-   
+
  });
--- a/toolkit/components/microformats/test/lib/dates.js
+++ b/toolkit/components/microformats/test/lib/dates.js
@@ -1,266 +1,266 @@
 /*!
 	dates
 	These functions are based on microformats implied rules for parsing date fragments from text.
 	They are not generalist date utilities and should only be used with the isodate.js module of this library.
-	
+
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
 	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 	Dependencies  utilities.js, isodate.js
 */
 
 
 var Modules = (function (modules) {
-	
+
 	modules.dates = {
 
-		
+
 		/**
 		 * does text contain am
 		 *
 		 * @param  {String} text
 		 * @return {Boolean}
 		 */
 		hasAM: function( text ) {
 			text = text.toLowerCase();
 			return(text.indexOf('am') > -1 || text.indexOf('a.m.') > -1);
 		},
-	
-	
+
+
 		/**
 		 * does text contain pm
 		 *
 		 * @param  {String} text
 		 * @return {Boolean}
 		 */
 		hasPM: function( text ) {
 			text = text.toLowerCase();
 			return(text.indexOf('pm') > -1 || text.indexOf('p.m.') > -1);
 		},
-	
-	
+
+
 		/**
 		 * remove am and pm from text and return it
 		 *
 		 * @param  {String} text
 		 * @return {String}
 		 */
 		removeAMPM: function( text ) {
 			return text.replace('pm', '').replace('p.m.', '').replace('am', '').replace('a.m.', '');
 		},
-	
-	   
+
+
 	   /**
 		 * simple test of whether ISO date string is a duration  i.e.  PY17M or PW12
 		 *
 		 * @param  {String} text
 		 * @return {Boolean}
 		 */
 		isDuration: function( text ) {
 			if(modules.utils.isString( text )){
 				text = text.toLowerCase();
 				if(modules.utils.startWith(text, 'p') ){
 					return true;
 				}
 			}
 			return false;
 		},
-	
-	
+
+
 	   /**
 		 * is text a time or timezone
 		 * i.e. HH-MM-SS or z+-HH-MM-SS 08:43 | 15:23:00:0567 | 10:34pm | 10:34 p.m. | +01:00:00 | -02:00 | z15:00 | 0843
 		 *
 		 * @param  {String} text
 		 * @return {Boolean}
-		 */ 
+		 */
 		isTime: function( text ) {
 			if(modules.utils.isString(text)){
 				text = text.toLowerCase();
 				text = modules.utils.trim( text );
 				// start with timezone char
 				if( text.match(':') && ( modules.utils.startWith(text, 'z') || modules.utils.startWith(text, '-')  || modules.utils.startWith(text, '+') )) {
 					return true;
 				}
 				// has ante meridiem or post meridiem
-				if( text.match(/^[0-9]/) && 
+				if( text.match(/^[0-9]/) &&
 					( this.hasAM(text) || this.hasPM(text) )) {
 					return true;
 				}
 				// contains time delimiter but not datetime delimiter
 				if( text.match(':') && !text.match(/t|\s/) ) {
 					return true;
 				}
-				
+
 				// if it's a number of 2, 4 or 6 chars
 				if(modules.utils.isNumber(text)){
 					if(text.length === 2 || text.length === 4 || text.length === 6){
 						return true;
 					}
 				}
 			}
 			return false;
 		},
-	
+
 
 		/**
 		 * parses a time from text and returns 24hr time string
 		 * i.e. 5:34am = 05:34:00 and 1:52:04p.m. = 13:52:04
 		 *
 		 * @param  {String} text
 		 * @return {String}
-		 */ 
+		 */
 		parseAmPmTime: function( text ) {
 			var out = text,
 				times = [];
-	
+
 			// if the string has a text : or am or pm
 			if(modules.utils.isString(out)) {
 				//text = text.toLowerCase();
 				text = text.replace(/[ ]+/g, '');
-	
+
 				if(text.match(':') || this.hasAM(text) || this.hasPM(text)) {
-	
+
 					if(text.match(':')) {
 						times = text.split(':');
 					} else {
 						// single number text i.e. 5pm
 						times[0] = text;
 						times[0] = this.removeAMPM(times[0]);
 					}
-					
+
 					// change pm hours to 24hr number
 					if(this.hasPM(text)) {
 						if(times[0] < 12) {
 							times[0] = parseInt(times[0], 10) + 12;
 						}
 					}
-	
+
 					// add leading zero's where needed
 					if(times[0] && times[0].length === 1) {
 						times[0] = '0' + times[0];
 					}
-					
+
 					// rejoin text elements together
 					if(times[0]) {
 						text = times.join(':');
 					}
 				}
 			}
-			
+
 			// remove am/pm strings
 			return this.removeAMPM(text);
 		},
-	
-	
+
+
 	   /**
 		 * overlays a time on a date to return the union of the two
 		 *
 		 * @param  {String} date
 		 * @param  {String} time
 		 * @param  {String} format ( Modules.ISODate profile format )
 		 * @return {Object} Modules.ISODate
-		 */ 
+		 */
 		dateTimeUnion: function(date, time, format) {
 			var isodate = new modules.ISODate(date, format),
 				isotime = new modules.ISODate();
-	
+
 			isotime.parseTime(this.parseAmPmTime(time), format);
 			if(isodate.hasFullDate() && isotime.hasTime()) {
 				isodate.tH = isotime.tH;
 				isodate.tM = isotime.tM;
 				isodate.tS = isotime.tS;
 				isodate.tD = isotime.tD;
 				return isodate;
 			} else {
 				if(isodate.hasFullDate()){
 					return isodate;
 				}
 				return new modules.ISODate();
 			}
 		},
-	
-	
+
+
 	   /**
 		 * concatenate an array of date and time text fragments to create an ISODate object
 		 * used for microformat value and value-title rules
 		 *
 		 * @param  {Array} arr ( Array of Strings )
 		 * @param  {String} format ( Modules.ISODate profile format )
 		 * @return {Object} Modules.ISODate
-		 */ 
+		 */
 		concatFragments: function (arr, format) {
 			var out = new modules.ISODate(),
 				i = 0,
 				value = '';
-			
-			// if the fragment already contains a full date just return it once 
+
+			// if the fragment already contains a full date just return it once
 			if(arr[0].toUpperCase().match('T')) {
 				return new modules.ISODate(arr[0], format);
 			}else{
 				for(i = 0; i < arr.length; i++) {
 				value = arr[i];
-	  
+
 				// date pattern
 				if( value.charAt(4) === '-' && out.hasFullDate() === false ){
 					out.parseDate(value);
 				}
-				
+
 				// time pattern
 				if( (value.indexOf(':') > -1 || modules.utils.isNumber( this.parseAmPmTime(value) )) && out.hasTime() === false ) {
 					// split time and timezone
 					var items = this.splitTimeAndZone(value);
 					value = items[0];
-					
+
 					// parse any use of am/pm
 					value = this.parseAmPmTime(value);
 					out.parseTime(value);
-					
-					// parse any timezone 
+
+					// parse any timezone
 					if(items.length > 1){
 						 out.parseTimeZone(items[1], format);
 					}
 				}
-				
+
 				// timezone pattern
 				if(value.charAt(0) === '-' || value.charAt(0) === '+' || value.toUpperCase() === 'Z') {
 					if( out.hasTimeZone() === false ){
 						out.parseTimeZone(value);
 					}
 				}
-	
+
 			}
 			return out;
-				
+
 			}
 		},
-		
-		
+
+
 	   /**
 		 * parses text by splitting it into an array of time and timezone strings
 		 *
 		 * @param  {String} text
 		 * @return {Array} Modules.ISODate
-		 */ 
+		 */
 		splitTimeAndZone: function ( text ){
 		   var out = [text],
 			   chars = ['-','+','z','Z'],
 			   i = chars.length;
-			   
+
 			while (i--) {
 			  if(text.indexOf(chars[i]) > -1){
 				  out[0] = text.slice( 0, text.indexOf(chars[i]) );
 				  out.push( text.slice( text.indexOf(chars[i]) ) );
 				  break;
 			   }
 			}
 		   return out;
 		}
-		
+
 	};
 
 
 	return modules;
 
 } (Modules || {}));
 
 
--- a/toolkit/components/microformats/test/lib/html.js
+++ b/toolkit/components/microformats/test/lib/html.js
@@ -1,107 +1,107 @@
 /*
-	html 
-	Extracts a HTML string from DOM nodes. Was created to get around the issue of not being able to exclude the content 
-	of nodes with the 'data-include' attribute. DO NOT replace with functions such as innerHTML as it will break a 
+	html
+	Extracts a HTML string from DOM nodes. Was created to get around the issue of not being able to exclude the content
+	of nodes with the 'data-include' attribute. DO NOT replace with functions such as innerHTML as it will break a
 	number of microformat include patterns.
-	
+
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
 	MIT License: https://raw.github.com/glennjones/microformat-node/master/license.txt
 	Dependencies  utilities.js, domutils.js
 */
 
 
 var Modules = (function (modules) {
-	
+
 	modules.html = {
-		
+
 		// elements which are self-closing
 		selfClosingElt: ['area', 'base', 'br', 'col', 'hr', 'img', 'input', 'link', 'meta', 'param', 'command', 'keygen', 'source'],
-	
+
 
 		/**
 		 * parse the html string from DOM Node
 		 *
 		 * @param  {DOM Node} node
 		 * @return {String}
-		 */ 
+		 */
 		parse: function( node ){
 			var out = '',
 				j = 0;
-	
+
 			// we do not want the outer container
 			if(node.childNodes && node.childNodes.length > 0){
 				for (j = 0; j < node.childNodes.length; j++) {
 					var text = this.walkTreeForHtml( node.childNodes[j] );
 					if(text !== undefined){
 						out += text;
 					}
 				}
 			}
-	
+
 			return out;
 		},
-	
-  
+
+
 		/**
 		 * walks the DOM tree parsing the html string from the nodes
 		 *
 		 * @param  {DOM Document} doc
 		 * @param  {DOM Node} node
 		 * @return {String}
-		 */ 
+		 */
 		walkTreeForHtml: function( node ) {
 			var out = '',
 				j = 0;
-	
+
 			// if node is a text node get its text
 			if(node.nodeType && node.nodeType === 3){
-				out += modules.domUtils.getElementText( node ); 
+				out += modules.domUtils.getElementText( node );
 			}
-	
-		
-			// exclude text which has been added with include pattern  - 
+
+
+			// exclude text which has been added with include pattern  -
 			if(node.nodeType && node.nodeType === 1 && modules.domUtils.hasAttribute(node, 'data-include') === false){
-	
+
 				// begin tag
-				out += '<' + node.tagName.toLowerCase();  
-	
+				out += '<' + node.tagName.toLowerCase();
+
 				// add attributes
 				var attrs = modules.domUtils.getOrderedAttributes(node);
 				for (j = 0; j < attrs.length; j++) {
 					out += ' ' + attrs[j].name +  '=' + '"' + attrs[j].value + '"';
 				}
-	
+
 				if(this.selfClosingElt.indexOf(node.tagName.toLowerCase()) === -1){
 					out += '>';
 				}
-	
+
 				// get the text of the child nodes
 				if(node.childNodes && node.childNodes.length > 0){
-					
+
 					for (j = 0; j < node.childNodes.length; j++) {
 						var text = this.walkTreeForHtml( node.childNodes[j] );
 						if(text !== undefined){
 							out += text;
 						}
 					}
 				}
-	
+
 				// end tag
 				if(this.selfClosingElt.indexOf(node.tagName.toLowerCase()) > -1){
-					out += ' />'; 
+					out += ' />';
 				}else{
-					out += '</' + node.tagName.toLowerCase() + '>'; 
+					out += '</' + node.tagName.toLowerCase() + '>';
 				}
-			} 
-			
+			}
+
 			return (out === '')? undefined : out;
-		}    
-	
-	
+		}
+
+
 	};
-	
+
 
 	return modules;
 
 } (Modules || {}));
 
--- a/toolkit/components/microformats/test/lib/isodate.js
+++ b/toolkit/components/microformats/test/lib/isodate.js
@@ -1,336 +1,336 @@
 /*!
 	iso date
 	This module was built for the exact needs of parsing ISO dates to the microformats standard.
-	
-	* Parses and builds ISO dates to the W3C note, HTML5 or RFC3339 profiles. 
-	* Also allows for profile detection using 'auto' 
+
+	* Parses and builds ISO dates to the W3C note, HTML5 or RFC3339 profiles.
+	* Also allows for profile detection using 'auto'
 	* Outputs to the same level of specificity of date and time that was input
-	
+
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
 	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
  */
- 
- 
- 
+
+
+
 var Modules = (function (modules) {
-	
-	
+
+
 	/**
 	 * constructor
 	 * parses text to find just the date element of an ISO date/time string i.e. 2008-05-01
 	 *
 	 * @param  {String} dateString
 	 * @param  {String} format
 	 * @return {String}
-	 */ 
+	 */
 	modules.ISODate = function ( dateString, format ) {
 		this.clear();
-	
+
 		this.format = (format)? format : 'auto'; // auto or W3C or RFC3339 or HTML5
 		this.setFormatSep();
-	
-		// optional should be full iso date/time string 
+
+		// optional should be full iso date/time string
 		if(arguments[0]) {
 			this.parse(dateString, format);
 		}
 	};
-	
+
 
 	modules.ISODate.prototype = {
-		
-		
+
+
 		/**
 		 * clear all states
 		 *
-		 */ 
+		 */
 		clear: function(){
 			this.clearDate();
 			this.clearTime();
 			this.clearTimeZone();
 			this.setAutoProfileState();
 		},
-		
-		
+
+
 		/**
 		 * clear date states
 		 *
-		 */ 
+		 */
 		clearDate: function(){
 			this.dY = -1;
 			this.dM = -1;
 			this.dD = -1;
 			this.dDDD = -1;
 		},
-		
-		
+
+
 		/**
 		 * clear time states
 		 *
-		 */ 
+		 */
 		clearTime: function(){
 			this.tH = -1;
 			this.tM = -1;
 			this.tS = -1;
 			this.tD = -1;
 		},
-		
-		
+
+
 		/**
 		 * clear timezone states
 		 *
-		 */ 
+		 */
 		clearTimeZone: function(){
 			this.tzH = -1;
 			this.tzM = -1;
 			this.tzPN = '+';
 			this.z = false;
 		},
-		
-		
+
+
 		/**
 		 * resets the auto profile state
 		 *
-		 */ 
+		 */
 		setAutoProfileState: function(){
 			this.autoProfile = {
 			   sep: 'T',
 			   dsep: '-',
 			   tsep: ':',
 			   tzsep: ':',
 			   tzZulu: 'Z'
 			};
 		},
-		
-	  
+
+
 		/**
 		 * parses text to find ISO date/time string i.e. 2008-05-01T15:45:19Z
 		 *
 		 * @param  {String} dateString
 		 * @param  {String} format
 		 * @return {String}
-		 */ 
+		 */
 		parse: function( dateString, format ) {
 			this.clear();
-			
+
 			var parts = [],
 				tzArray = [],
 				position = 0,
 				datePart = '',
 				timePart = '',
 				timeZonePart = '';
-				
+
 			if(format){
 				this.format = format;
 			}
-			
-	
-			
+
+
+
 			// discover date time separtor for auto profile
 			// Set to 'T' by default
 			if(dateString.indexOf('t') > -1) {
 				this.autoProfile.sep = 't';
 			}
 			if(dateString.indexOf('z') > -1) {
 				this.autoProfile.tzZulu = 'z';
 			}
 			if(dateString.indexOf('Z') > -1) {
 				this.autoProfile.tzZulu = 'Z';
 			}
 			if(dateString.toUpperCase().indexOf('T') === -1) {
 				this.autoProfile.sep = ' ';
-			}     
-	
-	
+			}
+
+
 			dateString = dateString.toUpperCase().replace(' ','T');
-	
+
 			// break on 'T' divider or space
 			if(dateString.indexOf('T') > -1) {
 				parts = dateString.split('T');
 				datePart = parts[0];
 				timePart = parts[1];
-	
-				// zulu UTC                 
+
+				// zulu UTC
 				if(timePart.indexOf( 'Z' ) > -1) {
 					this.z = true;
 				}
-	
+
 				// timezone
 				if(timePart.indexOf( '+' ) > -1 || timePart.indexOf( '-' ) > -1) {
 					tzArray = timePart.split( 'Z' ); // incase of incorrect use of Z
 					timePart = tzArray[0];
 					timeZonePart = tzArray[1];
-	
+
 					// timezone
 					if(timePart.indexOf( '+' ) > -1 || timePart.indexOf( '-' ) > -1) {
 						position = 0;
-	
+
 						if(timePart.indexOf( '+' ) > -1) {
 							position = timePart.indexOf( '+' );
 						} else {
 							position = timePart.indexOf( '-' );
 						}
-	
+
 						timeZonePart = timePart.substring( position, timePart.length );
 						timePart = timePart.substring( 0, position );
 					}
 				}
-	
+
 			} else {
 				datePart = dateString;
 			}
-	
+
 			if(datePart !== '') {
 				this.parseDate( datePart );
 				if(timePart !== '') {
 					this.parseTime( timePart );
 					if(timeZonePart !== '') {
 						this.parseTimeZone( timeZonePart );
 					}
 				}
 			}
 			return this.toString( format );
 		},
-	
-		
+
+
 		/**
 		 * parses text to find just the date element of an ISO date/time string i.e. 2008-05-01
 		 *
 		 * @param  {String} dateString
 		 * @param  {String} format
 		 * @return {String}
-		 */ 
+		 */
 		parseDate: function( dateString, format ) {
 			this.clearDate();
-			
+
 			var parts = [];
-				
+
 			// discover timezone separtor for auto profile // default is ':'
 			if(dateString.indexOf('-') === -1) {
 				this.autoProfile.tsep = '';
-			}  
-	
+			}
+
 			// YYYY-DDD
 			parts = dateString.match( /(\d\d\d\d)-(\d\d\d)/ );
 			if(parts) {
 				if(parts[1]) {
 					this.dY = parts[1];
 				}
 				if(parts[2]) {
 					this.dDDD = parts[2];
 				}
 			}
-	
+
 			if(this.dDDD === -1) {
 				// YYYY-MM-DD ie 2008-05-01 and YYYYMMDD ie 20080501
 				parts = dateString.match( /(\d\d\d\d)?-?(\d\d)?-?(\d\d)?/ );
 				if(parts[1]) {
 					this.dY = parts[1];
 				}
 				if(parts[2]) {
 					this.dM = parts[2];
 				}
 				if(parts[3]) {
 					this.dD = parts[3];
 				}
 			}
 			return this.toString(format);
 		},
-	
-	
+
+
 		/**
 		 * parses text to find just the time element of an ISO date/time string i.e. 13:30:45
 		 *
 		 * @param  {String} timeString
 		 * @param  {String} format
 		 * @return {String}
-		 */ 
+		 */
 		parseTime: function( timeString, format ) {
 			this.clearTime();
 			var parts = [];
-				
+
 			// discover date separtor for auto profile // default is ':'
 			if(timeString.indexOf(':') === -1) {
 				this.autoProfile.tsep = '';
-			}      
-	
+			}
+
 			// finds timezone HH:MM:SS and HHMMSS  ie 13:30:45, 133045 and 13:30:45.0135
 			parts = timeString.match( /(\d\d)?:?(\d\d)?:?(\d\d)?.?([0-9]+)?/ );
 			if(parts[1]) {
 				this.tH = parts[1];
 			}
 			if(parts[2]) {
 				this.tM = parts[2];
 			}
 			if(parts[3]) {
 				this.tS = parts[3];
 			}
 			if(parts[4]) {
 				this.tD = parts[4];
 			}
 			return this.toTimeString(format);
 		},
-	
-		
+
+
 		/**
 		 * parses text to find just the time element of an ISO date/time string i.e. +08:00
 		 *
 		 * @param  {String} timeString
 		 * @param  {String} format
 		 * @return {String}
-		 */ 
+		 */
 		parseTimeZone: function( timeString, format ) {
 			this.clearTimeZone();
 			var parts = [];
-			
+
 			if(timeString.toLowerCase() === 'z'){
 				this.z = true;
 				// set case for z
 				this.autoProfile.tzZulu = (timeString === 'z')? 'z' : 'Z';
 			}else{
-				
+
 				// discover timezone separtor for auto profile // default is ':'
 				if(timeString.indexOf(':') === -1) {
 					this.autoProfile.tzsep = '';
-				}   
-			   
+				}
+
 				// finds timezone +HH:MM and +HHMM  ie +13:30 and +1330
 				parts = timeString.match( /([\-\+]{1})?(\d\d)?:?(\d\d)?/ );
 				if(parts[1]) {
 					this.tzPN = parts[1];
 				}
 				if(parts[2]) {
 					this.tzH = parts[2];
 				}
 				if(parts[3]) {
 					this.tzM = parts[3];
-				} 
-				
-	  
+				}
+
+
 			}
-			this.tzZulu = 'z';    
+			this.tzZulu = 'z';
 			return this.toTimeString( format );
 		},
-		
-		
+
+
 		/**
 		 * returns ISO date/time string in W3C Note, RFC 3339, HTML5, or auto profile
 		 *
 		 * @param  {String} format
 		 * @return {String}
-		 */ 
+		 */
 		toString: function( format ) {
 			var output = '';
-	
+
 			if(format){
 				this.format = format;
 			}
 			this.setFormatSep();
-	
+
 			if(this.dY  > -1) {
 				output = this.dY;
 				if(this.dM > 0 && this.dM < 13) {
 					output += this.dsep + this.dM;
 					if(this.dD > 0 && this.dD < 32) {
 						output += this.dsep + this.dD;
 						if(this.tH > -1 && this.tH < 25) {
 							output += this.sep + this.toTimeString( format );
@@ -338,73 +338,73 @@ var Modules = (function (modules) {
 					}
 				}
 				if(this.dDDD > -1) {
 					output += this.dsep + this.dDDD;
 				}
 			} else if(this.tH > -1) {
 				output += this.toTimeString( format );
 			}
-	
+
 			return output;
 		},
-	
-	
+
+
 		/**
 		 * returns just the time string element of an ISO date/time
 		 * in W3C Note, RFC 3339, HTML5, or auto profile
 		 *
 		 * @param  {String} format
 		 * @return {String}
-		 */ 
+		 */
 		toTimeString: function( format ) {
 			var out = '';
-	
+
 			if(format){
 				this.format = format;
 			}
 			this.setFormatSep();
-			
+
 			// time can only be created with a full date
 			if(this.tH) {
 				if(this.tH > -1 && this.tH < 25) {
 					out += this.tH;
 					if(this.tM > -1 && this.tM < 61){
 						out += this.tsep + this.tM;
 						if(this.tS > -1 && this.tS < 61){
 							out += this.tsep + this.tS;
 							if(this.tD > -1){
 								out += '.' + this.tD;
 							}
 						}
 					}
-					
-					
-			  
-					// time zone offset 
+
+
+
+					// time zone offset
 					if(this.z) {
 						out += this.tzZulu;
 					} else {
 						if(this.tzH && this.tzH > -1 && this.tzH < 25) {
 							out += this.tzPN + this.tzH;
 							if(this.tzM > -1 && this.tzM < 61){
 								out += this.tzsep + this.tzM;
 							}
 						}
 					}
 				}
 			}
 			return out;
 		},
-	
-	
+
+
 		/**
 		 * set the current profile to W3C Note, RFC 3339, HTML5, or auto profile
 		 *
-		 */ 
+		 */
 		setFormatSep: function() {
 			switch( this.format.toLowerCase() ) {
 				case 'rfc3339':
 					this.sep = 'T';
 					this.dsep = '';
 					this.tsep = '';
 					this.tzsep = '';
 					this.tzZulu = 'Z';
@@ -427,55 +427,55 @@ var Modules = (function (modules) {
 					// auto - defined by format of input string
 					this.sep = this.autoProfile.sep;
 					this.dsep = this.autoProfile.dsep;
 					this.tsep = this.autoProfile.tsep;
 					this.tzsep = this.autoProfile.tzsep;
 					this.tzZulu = this.autoProfile.tzZulu;
 			}
 		},
-	
-	
+
+
 		/**
 		 * does current data contain a full date i.e. 2015-03-23
 		 *
 		 * @return {Boolean}
-		 */ 
+		 */
 		hasFullDate: function() {
 			return(this.dY !== -1 && this.dM !== -1 && this.dD !== -1);
 		},
-	
-	
+
+
 		/**
 		 * does current data contain a minimum date which is just a year number i.e. 2015
 		 *
 		 * @return {Boolean}
-		 */ 
+		 */
 		hasDate: function() {
 			return(this.dY !== -1);
 		},
-	
-	
+
+
 		/**
 		 * does current data contain a minimum time which is just a hour number i.e. 13
 		 *
 		 * @return {Boolean}
-		 */     
+		 */
 		hasTime: function() {
 			return(this.tH !== -1);
 		},
-	
+
 		/**
 		 * does current data contain a minimum timezone i.e. -1 || +1 || z
 		 *
 		 * @return {Boolean}
-		 */    
+		 */
 		hasTimeZone: function() {
 			return(this.tzH !== -1);
 		}
-	
+
 	};
-	
+
 	modules.ISODate.prototype.constructor = modules.ISODate;
 
 	return modules;
 
 } (Modules || {}));
--- a/toolkit/components/microformats/test/lib/maps/h-adr.js
+++ b/toolkit/components/microformats/test/lib/maps/h-adr.js
@@ -1,15 +1,15 @@
 /*
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
-	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt  
+	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 var Modules = (function (modules) {
-	
+
 	modules.maps = (modules.maps)? modules.maps : {};
 
 	modules.maps['h-adr'] = {
 		root: 'adr',
 		name: 'h-adr',
 		properties: {
 			'post-office-box': {},
 			'street-address': {},
--- a/toolkit/components/microformats/test/lib/maps/h-card.js
+++ b/toolkit/components/microformats/test/lib/maps/h-card.js
@@ -1,14 +1,14 @@
 /*
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
-	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt  
+	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 var Modules = (function (modules) {
-	
+
 	modules.maps = (modules.maps)? modules.maps : {};
 
 	modules.maps['h-card'] =  {
 		root: 'vcard',
 		name: 'h-card',
 		properties: {
 			'fn': {
 				'map': 'p-name'
@@ -27,17 +27,17 @@ var Modules = (function (modules) {
 			'category': {
 				'map': 'p-category',
 				'relAlt': ['tag']
 			},
 			'email': {
 				'map': 'u-email'
 			},
 			'geo': {
-				'map': 'p-geo', 
+				'map': 'p-geo',
 				'uf': ['h-geo']
 			},
 			'key': {
 				'map': 'u-key'
 			},
 			'label': {},
 			'logo': {
 				'map': 'u-logo'
@@ -77,9 +77,9 @@ var Modules = (function (modules) {
 				'map': 'u-url'
 			}
 		}
 	};
 
 	return modules;
 
 } (Modules || {}));
-	
+
--- a/toolkit/components/microformats/test/lib/maps/h-entry.js
+++ b/toolkit/components/microformats/test/lib/maps/h-entry.js
@@ -1,15 +1,15 @@
 /*
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
-	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt  
+	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 var Modules = (function (modules) {
-	
+
 	modules.maps = (modules.maps)? modules.maps : {};
 
 	modules.maps['h-entry'] = {
 		root: 'hentry',
 		name: 'h-entry',
 		properties: {
 			'entry-title': {
 				'map': 'p-name'
@@ -21,32 +21,32 @@ var Modules = (function (modules) {
 				'map': 'e-content'
 			},
 			'published': {
 				'map': 'dt-published'
 			},
 			'updated': {
 				'map': 'dt-updated'
 			},
-			'author': { 
+			'author': {
 				'uf': ['h-card']
 			},
 			'category': {
 				'map': 'p-category',
 				'relAlt': ['tag']
 			},
 			'geo': {
-				'map': 'p-geo', 
+				'map': 'p-geo',
 				'uf': ['h-geo']
 			},
 			'latitude': {},
 			'longitude': {},
 			'url': {
 				'map': 'u-url',
 				'relAlt': ['bookmark']
 			}
 		}
 	};
 
 	return modules;
-	
+
 } (Modules || {}));
 
--- a/toolkit/components/microformats/test/lib/maps/h-event.js
+++ b/toolkit/components/microformats/test/lib/maps/h-event.js
@@ -1,18 +1,18 @@
 /*
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
-	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt  
+	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 var Modules = (function (modules) {
-	
+
 	modules.maps = (modules.maps)? modules.maps : {};
 
-	modules.maps['h-event'] = {  
+	modules.maps['h-event'] = {
 		root: 'vevent',
 		name: 'h-event',
 		properties: {
 			'summary': {
 				'map': 'p-name'
 			},
 			'dtstart': {
 				'map': 'dt-start'
@@ -48,17 +48,17 @@ var Modules = (function (modules) {
 				'uf': ['h-card']},
 			'uid': {
 				'map': 'u-uid'
 			},
 			'attach': {
 				'map': 'u-attach'
 			},
 			'status': {},
-			'rdate': {}, 
+			'rdate': {},
 			'rrule': {}
 		}
 	};
 
 	return modules;
 
 } (Modules || {}));
 
--- a/toolkit/components/microformats/test/lib/maps/h-feed.js
+++ b/toolkit/components/microformats/test/lib/maps/h-feed.js
@@ -1,29 +1,29 @@
 /*
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
-	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt  
+	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 var Modules = (function (modules) {
-	
+
 	modules.maps = (modules.maps)? modules.maps : {};
 
 	modules.maps['h-feed'] = {
 		root: 'hfeed',
 		name: 'h-feed',
 		properties: {
 			'category': {
 				'map': 'p-category',
 				'relAlt': ['tag']
 			},
 			'summary': {
 				'map': 'p-summary'
 			},
-			'author': { 
+			'author': {
 				'uf': ['h-card']
 			},
 			'url': {
 				'map': 'u-url'
 			},
 			'photo': {
 				'map': 'u-photo'
 			},
--- a/toolkit/components/microformats/test/lib/maps/h-geo.js
+++ b/toolkit/components/microformats/test/lib/maps/h-geo.js
@@ -1,15 +1,15 @@
 /*
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
-	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt  
+	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 var Modules = (function (modules) {
-	
+
 	modules.maps = (modules.maps)? modules.maps : {};
 
 	modules.maps['h-geo'] = {
 		root: 'geo',
 		name: 'h-geo',
 		properties: {
 			'latitude': {},
 			'longitude': {}
--- a/toolkit/components/microformats/test/lib/maps/h-item.js
+++ b/toolkit/components/microformats/test/lib/maps/h-item.js
@@ -1,15 +1,15 @@
 /*
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
-	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt  
+	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 var Modules = (function (modules) {
-	
+
 	modules.maps = (modules.maps)? modules.maps : {};
 
 	modules.maps['h-item'] = {
 		root: 'item',
 		name: 'h-item',
 		subTree: false,
 		properties: {
 			'fn': {
@@ -22,9 +22,9 @@ var Modules = (function (modules) {
 				'map': 'u-photo'
 			}
 		}
 	};
 
 	return modules;
 
 } (Modules || {}));
-	
+
--- a/toolkit/components/microformats/test/lib/maps/h-listing.js
+++ b/toolkit/components/microformats/test/lib/maps/h-listing.js
@@ -1,15 +1,15 @@
 /*
 		Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
-		MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt  
+		MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 var Modules = (function (modules) {
-		
+
 	modules.maps = (modules.maps)? modules.maps : {};
 
 		modules.maps['h-listing'] = {
 			root: 'hlisting',
 			name: 'h-listing',
 			properties: {
 				'version': {},
 				'lister': {
--- a/toolkit/components/microformats/test/lib/maps/h-news.js
+++ b/toolkit/components/microformats/test/lib/maps/h-news.js
@@ -1,15 +1,15 @@
 /*
 		Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
-		MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt  
+		MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 var Modules = (function (modules) {
-		
+
 	modules.maps = (modules.maps)? modules.maps : {};
 
 		modules.maps['h-news'] = {
 			root: 'hnews',
 			name: 'h-news',
 			properties: {
 				'entry': {
 					'uf': ['h-entry']
@@ -24,17 +24,17 @@ var Modules = (function (modules) {
 				},
 				'dateline': {
 					'uf': ['h-card']
 				},
 				'item-license': {
 					'map': 'u-item-license'
 				},
 				'principles': {
-					'map': 'u-principles', 
+					'map': 'u-principles',
 					'relAlt': ['principles']
 				}
 			}
 		};
 
 		return modules;
 
 } (Modules || {}));
--- a/toolkit/components/microformats/test/lib/maps/h-org.js
+++ b/toolkit/components/microformats/test/lib/maps/h-org.js
@@ -1,15 +1,15 @@
 /*
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
-	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt  
+	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 var Modules = (function (modules) {
-	
+
 	modules.maps = (modules.maps)? modules.maps : {};
 
 	modules.maps['h-org'] = {
 		root: 'h-x-org',  // drop this from v1 as it causes issue with fn org hcard pattern
 		name: 'h-org',
 		childStructure: true,
 		properties: {
 			'organization-name': {},
--- a/toolkit/components/microformats/test/lib/maps/h-product.js
+++ b/toolkit/components/microformats/test/lib/maps/h-product.js
@@ -1,15 +1,15 @@
 /*
 		Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
-		MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt  
+		MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 var Modules = (function (modules) {
-		
+
 	modules.maps = (modules.maps)? modules.maps : {};
 
 		modules.maps['h-product'] = {
 			root: 'hproduct',
 			name: 'h-product',
 			properties: {
 				'brand': {
 					'uf': ['h-card']
--- a/toolkit/components/microformats/test/lib/maps/h-recipe.js
+++ b/toolkit/components/microformats/test/lib/maps/h-recipe.js
@@ -1,15 +1,15 @@
 /*
 		Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
-		MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt  
+		MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 var Modules = (function (modules) {
-		
+
 	modules.maps = (modules.maps)? modules.maps : {};
 
 		modules.maps['h-recipe'] = {
 			root: 'hrecipe',
 			name: 'h-recipe',
 			properties: {
 				'fn': {
 					'map': 'p-name'
--- a/toolkit/components/microformats/test/lib/maps/h-resume.js
+++ b/toolkit/components/microformats/test/lib/maps/h-resume.js
@@ -1,15 +1,15 @@
 /*
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
-	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt  
+	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 var Modules = (function (modules) {
-	
+
 	modules.maps = (modules.maps)? modules.maps : {};
 
 	modules.maps['h-resume'] = {
 		root: 'hresume',
 		name: 'h-resume',
 		properties: {
 			'summary': {},
 			'contact': {
--- a/toolkit/components/microformats/test/lib/maps/h-review-aggregate.js
+++ b/toolkit/components/microformats/test/lib/maps/h-review-aggregate.js
@@ -1,32 +1,32 @@
 /*
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
-	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt  
+	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 var Modules = (function (modules) {
-	
+
 	modules.maps = (modules.maps)? modules.maps : {};
 
 	modules.maps['h-review-aggregate'] = {
 		root: 'hreview-aggregate',
 		name: 'h-review-aggregate',
 		properties: {
 			'summary': {
 				'map': 'p-name'
 			},
 			'item': {
 				'map': 'p-item',
 				'uf': ['h-item', 'h-geo', 'h-adr', 'h-card', 'h-event', 'h-product']
 			},
 			'rating': {},
 			'average': {},
 			'best': {},
-			'worst': {},       
+			'worst': {},
 			'count': {},
 			'votes': {},
 			'category': {
 				'map': 'p-category',
 				'relAlt': ['tag']
 			},
 			'url': {
 				'map': 'u-url',
--- a/toolkit/components/microformats/test/lib/maps/h-review.js
+++ b/toolkit/components/microformats/test/lib/maps/h-review.js
@@ -1,15 +1,15 @@
 /*
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
-	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt  
+	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 var Modules = (function (modules) {
-	
+
 	modules.maps = (modules.maps)? modules.maps : {};
 
 	modules.maps['h-review'] = {
 		root: 'hreview',
 		name: 'h-review',
 		properties: {
 			'summary': {
 				'map': 'p-name'
--- a/toolkit/components/microformats/test/lib/maps/rel.js
+++ b/toolkit/components/microformats/test/lib/maps/rel.js
@@ -1,47 +1,47 @@
 /*
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
-	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt  
+	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 var Modules = (function (modules) {
-	
+
 	modules.rels = {
 		// xfn
-		'friend': [ 'yes','external'], 
-		'acquaintance': [ 'yes','external'],  
-		'contact': [ 'yes','external'], 
-		'met': [ 'yes','external'], 
-		'co-worker': [ 'yes','external'],  
-		'colleague': [ 'yes','external'], 
-		'co-resident': [ 'yes','external'],  
-		'neighbor': [ 'yes','external'], 
-		'child': [ 'yes','external'],  
-		'parent': [ 'yes','external'],  
-		'sibling': [ 'yes','external'],  
-		'spouse': [ 'yes','external'],  
-		'kin': [ 'yes','external'], 
-		'muse': [ 'yes','external'],  
-		'crush': [ 'yes','external'],  
-		'date': [ 'yes','external'],  
-		'sweetheart': [ 'yes','external'], 
-		'me': [ 'yes','external'], 
-	
-		// other rel=* 
+		'friend': [ 'yes','external'],
+		'acquaintance': [ 'yes','external'],
+		'contact': [ 'yes','external'],
+		'met': [ 'yes','external'],
+		'co-worker': [ 'yes','external'],
+		'colleague': [ 'yes','external'],
+		'co-resident': [ 'yes','external'],
+		'neighbor': [ 'yes','external'],
+		'child': [ 'yes','external'],
+		'parent': [ 'yes','external'],
+		'sibling': [ 'yes','external'],
+		'spouse': [ 'yes','external'],
+		'kin': [ 'yes','external'],
+		'muse': [ 'yes','external'],
+		'crush': [ 'yes','external'],
+		'date': [ 'yes','external'],
+		'sweetheart': [ 'yes','external'],
+		'me': [ 'yes','external'],
+
+		// other rel=*
 		'license': [ 'yes','yes'],
 		'nofollow': [ 'no','external'],
 		'tag': [ 'no','yes'],
 		'self': [ 'no','external'],
 		'bookmark': [ 'no','external'],
 		'author': [ 'no','external'],
 		'home': [ 'no','external'],
 		'directory': [ 'no','external'],
 		'enclosure': [ 'no','external'],
 		'pronunciation': [ 'no','external'],
 		'payment': [ 'no','external'],
 		'principles': [ 'no','external']
-	
+
 	};
-	
+
 		return modules;
 
 } (Modules || {}));
--- a/toolkit/components/microformats/test/lib/parser-implied.js
+++ b/toolkit/components/microformats/test/lib/parser-implied.js
@@ -1,67 +1,67 @@
 /*!
 	Parser implied
 	All the functions that deal with microformats implied rules
-	
+
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
 	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 	Dependencies  dates.js, domutils.js, html.js, isodate,js, text.js, utilities.js, url.js
 */
 
 var Modules = (function (modules) {
-	
+
 	// check parser module is loaded
 	if(modules.Parser){
-	
+
 		/**
-		 * applies "implied rules" microformat output structure i.e. feed-title, name, photo, url and date 
+		 * applies "implied rules" microformat output structure i.e. feed-title, name, photo, url and date
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf (microformat output structure)
 		 * @param  {Object} parentClasses (classes structure)
 		 * @param  {Boolean} impliedPropertiesByVersion
 		 * @return {Object}
 		 */
 		 modules.Parser.prototype.impliedRules = function(node, uf, parentClasses) {
 			var typeVersion = (uf.typeVersion)? uf.typeVersion: 'v2';
-			
+
 			// TEMP: override to allow v1 implied properties while spec changes
 			if(this.options.impliedPropertiesByVersion === false){
 				typeVersion = 'v2';
 			}
-			
+
 			if(node && uf && uf.properties) {
-				uf = this.impliedBackwardComp( node, uf, parentClasses );  
+				uf = this.impliedBackwardComp( node, uf, parentClasses );
 				if(typeVersion === 'v2'){
 					uf = this.impliedhFeedTitle( uf );
-					uf = this.impliedName( node, uf ); 
-					uf = this.impliedPhoto( node, uf ); 	
+					uf = this.impliedName( node, uf );
+					uf = this.impliedPhoto( node, uf );
 					uf = this.impliedUrl( node, uf );
 				}
 				uf = this.impliedValue( node, uf, parentClasses );
 				uf = this.impliedDate( uf );
-				
+
 				// TEMP: flagged while spec changes are put forward
 				if(this.options.parseLatLonGeo === true){
 					uf = this.impliedGeo( uf );
-				}  
+				}
 			}
 
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * apply implied name rule
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */		
+		 */
 		modules.Parser.prototype.impliedName = function(node, uf) {
 			// implied name rule
 			/*
 				img.h-x[alt]										<img class="h-card" src="glenn.htm" alt="Glenn Jones"></a>
 				area.h-x[alt] 										<area class="h-card" href="glenn.htm" alt="Glenn Jones"></area>
 				abbr.h-x[title]										<abbr class="h-card" title="Glenn Jones"GJ</abbr>
 
 				.h-x>img:only-child[alt]:not[.h-*]					<div class="h-card"><a src="glenn.htm" alt="Glenn Jones"></a></div>
@@ -69,134 +69,134 @@ var Modules = (function (modules) {
 				.h-x>abbr:only-child[title] 						<div class="h-card"><abbr title="Glenn Jones">GJ</abbr></div>
 
 				.h-x>:only-child>img:only-child[alt]:not[.h-*] 		<div class="h-card"><span><img src="jane.html" alt="Jane Doe"/></span></div>
 				.h-x>:only-child>area:only-child[alt]:not[.h-*] 	<div class="h-card"><span><area href="jane.html" alt="Jane Doe"></area></span></div>
 				.h-x>:only-child>abbr:only-child[title]				<div class="h-card"><span><abbr title="Jane Doe">JD</abbr></span></div>
 			*/
 			var name,
 				value;
-					
+
 			if(!uf.properties.name) {
 				value = this.getImpliedProperty(node, ['img', 'area', 'abbr'], this.getNameAttr);
 				var textFormat = this.options.textFormat;
 				// if no value for tags/properties use text
 				if(!value) {
 					name = [modules.text.parse(this.document, node, textFormat)];
 				}else{
 					name = [modules.text.parseText(this.document, value, textFormat)];
 				}
 				if(name && name[0] !== ''){
 					uf.properties.name = name;
 				}
 			}
-			
+
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * apply implied photo rule
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */		
+		 */
 		modules.Parser.prototype.impliedPhoto = function(node, uf) {
 			// implied photo rule
 			/*
 				img.h-x[src] 												<img class="h-card" alt="Jane Doe" src="jane.jpeg"/>
 				object.h-x[data] 											<object class="h-card" data="jane.jpeg"/>Jane Doe</object>
-				.h-x>img[src]:only-of-type:not[.h-*]						<div class="h-card"><img alt="Jane Doe" src="jane.jpeg"/></div> 
-				.h-x>object[data]:only-of-type:not[.h-*] 					<div class="h-card"><object data="jane.jpeg"/>Jane Doe</object></div> 
-				.h-x>:only-child>img[src]:only-of-type:not[.h-*] 			<div class="h-card"><span><img alt="Jane Doe" src="jane.jpeg"/></span></div> 
-				.h-x>:only-child>object[data]:only-of-type:not[.h-*] 		<div class="h-card"><span><object data="jane.jpeg"/>Jane Doe</object></span></div> 
+				.h-x>img[src]:only-of-type:not[.h-*]						<div class="h-card"><img alt="Jane Doe" src="jane.jpeg"/></div>
+				.h-x>object[data]:only-of-type:not[.h-*] 					<div class="h-card"><object data="jane.jpeg"/>Jane Doe</object></div>
+				.h-x>:only-child>img[src]:only-of-type:not[.h-*] 			<div class="h-card"><span><img alt="Jane Doe" src="jane.jpeg"/></span></div>
+				.h-x>:only-child>object[data]:only-of-type:not[.h-*] 		<div class="h-card"><span><object data="jane.jpeg"/>Jane Doe</object></span></div>
 			*/
 			var value;
 			if(!uf.properties.photo) {
 				value = this.getImpliedProperty(node, ['img', 'object'], this.getPhotoAttr);
 				if(value) {
 					// relative to absolute URL
 					if(value && value !== '' && this.options.baseUrl !== '' && value.indexOf('://') === -1) {
 						value = modules.url.resolve(value, this.options.baseUrl);
 					}
 					uf.properties.photo = [modules.utils.trim(value)];
 				}
-			}		
+			}
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * apply implied URL rule
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */		
+		 */
 		modules.Parser.prototype.impliedUrl = function(node, uf) {
 			// implied URL rule
 			/*
 				a.h-x[href]  							<a class="h-card" href="glenn.html">Glenn</a>
 				area.h-x[href]  						<area class="h-card" href="glenn.html">Glenn</area>
-				.h-x>a[href]:only-of-type:not[.h-*]  	<div class="h-card" ><a href="glenn.html">Glenn</a><p>...</p></div> 
+				.h-x>a[href]:only-of-type:not[.h-*]  	<div class="h-card" ><a href="glenn.html">Glenn</a><p>...</p></div>
 				.h-x>area[href]:only-of-type:not[.h-*]  <div class="h-card" ><area href="glenn.html">Glenn</area><p>...</p></div>
 			*/
 			var value;
 			if(!uf.properties.url) {
 				value = this.getImpliedProperty(node, ['a', 'area'], this.getURLAttr);
 				if(value) {
 					// relative to absolute URL
 					if(value && value !== '' && this.options.baseUrl !== '' && value.indexOf('://') === -1) {
 						value = modules.url.resolve(value, this.options.baseUrl);
 					}
 					uf.properties.url = [modules.utils.trim(value)];
 				}
-			}	
+			}
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * apply implied date rule - if there is a time only property try to concat it with any date property
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */		
+		 */
 		modules.Parser.prototype.impliedDate = function(uf) {
 			// implied date rule
 			// http://microformats.org/wiki/value-class-pattern#microformats2_parsers
 			// http://microformats.org/wiki/microformats2-parsing-issues#implied_date_for_dt_properties_both_mf2_and_backcompat
 			var newDate;
 			if(uf.times.length > 0 && uf.dates.length > 0) {
 				newDate = modules.dates.dateTimeUnion(uf.dates[0][1], uf.times[0][1], this.options.dateFormat);
 				uf.properties[this.removePropPrefix(uf.times[0][0])][0] = newDate.toString(this.options.dateFormat);
 			}
 			// clean-up object
 			delete uf.times;
 			delete uf.dates;
 			return uf;
 		};
-			
-			
+
+
 		/**
 		 * get an implied property value from pre-defined tag/attriubte combinations
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {String} tagList (Array of tags from which an implied value can be pulled)
 		 * @param  {String} getAttrFunction (Function which can extract implied value)
 		 * @return {String || null}
 		 */
 		modules.Parser.prototype.getImpliedProperty = function(node, tagList, getAttrFunction) {
 			// i.e. img.h-card
-			var value = getAttrFunction(node), 
+			var value = getAttrFunction(node),
 				descendant,
 				child;
-					
+
 			if(!value) {
 				// i.e. .h-card>img:only-of-type:not(.h-card)
 				descendant = modules.domUtils.getSingleDescendantOfType( node, tagList);
 				if(descendant && this.hasHClass(descendant) === false){
 					value = getAttrFunction(descendant);
 				}
 				if(node.children.length > 0 ){
 					// i.e.  .h-card>:only-child>img:only-of-type:not(.h-card)
@@ -204,114 +204,114 @@ var Modules = (function (modules) {
 					if(child && this.hasHClass(child) === false){
 						descendant = modules.domUtils.getSingleDescendantOfType(child, tagList);
 						if(descendant && this.hasHClass(descendant) === false){
 							value = getAttrFunction(descendant);
 						}
 					}
 				}
 			}
-					
+
 			return value;
 		};
-			
-			
+
+
 		/**
 		 * get an implied name value from a node
 		 *
 		 * @param  {DOM Node} node
 		 * @return {String || null}
-		 */		
+		 */
 		modules.Parser.prototype.getNameAttr = function(node) {
 			var value = modules.domUtils.getAttrValFromTagList(node, ['img','area'], 'alt');
 			if(!value) {
 				value = modules.domUtils.getAttrValFromTagList(node, ['abbr'], 'title');
 			}
 			return value;
 		};
-	
-	
+
+
 		/**
 		 * get an implied photo value from a node
 		 *
 		 * @param  {DOM Node} node
 		 * @return {String || null}
-		 */	
+		 */
 		modules.Parser.prototype.getPhotoAttr = function(node) {
 			var value = modules.domUtils.getAttrValFromTagList(node, ['img'], 'src');
 			if(!value && modules.domUtils.hasAttributeValue(node, 'class', 'include') === false) {
 				value = modules.domUtils.getAttrValFromTagList(node, ['object'], 'data');
 			}
 			return value;
 		};
-			
-			
+
+
 		/**
 		 * get an implied photo value from a node
 		 *
 		 * @param  {DOM Node} node
 		 * @return {String || null}
-		 */		
+		 */
 		modules.Parser.prototype.getURLAttr = function(node) {
 			var value = null;
 			if(modules.domUtils.hasAttributeValue(node, 'class', 'include') === false){
-				
+
 				value = modules.domUtils.getAttrValFromTagList(node, ['a'], 'href');
 				if(!value) {
 					value = modules.domUtils.getAttrValFromTagList(node, ['area'], 'href');
 				}
-				
+
 			}
 			return value;
 		};
-		
-		
+
+
 		/**
-		 * 
+		 *
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */	
+		 */
 		modules.Parser.prototype.impliedValue = function(node, uf, parentClasses){
-			
+
 			// intersection of implied name and implied value rules
-			if(uf.properties.name) {	
+			if(uf.properties.name) {
 				if(uf.value && parentClasses.root.length > 0 && parentClasses.properties.length === 1){
 					uf = this.getAltValue(uf, parentClasses.properties[0][0], 'p-name', uf.properties.name[0]);
 				}
 			}
-			
+
 			// intersection of implied URL and implied value rules
 			if(uf.properties.url) {
 				if(parentClasses && parentClasses.root.length === 1 && parentClasses.properties.length === 1){
 					uf = this.getAltValue(uf, parentClasses.properties[0][0], 'u-url', uf.properties.url[0]);
 				}
-			}	
-			
+			}
+
 			// apply alt value
 			if(uf.altValue !== null){
 				uf.value = uf.altValue.value;
 			}
 			delete uf.altValue;
-	
-	
+
+
 			return uf;
 		};
-			
-		
+
+
 		/**
 		 * get alt value based on rules about parent property prefix
 		 *
 		 * @param  {Object} uf
 		 * @param  {String} parentPropertyName
 		 * @param  {String} propertyName
 		 * @param  {String} value
 		 * @return {Object}
-		 */	
+		 */
 		modules.Parser.prototype.getAltValue = function(uf, parentPropertyName, propertyName, value){
 			if(uf.value && !uf.altValue){
 				// first p-name of the h-* child
 				if(modules.utils.startWith(parentPropertyName,'p-') && propertyName === 'p-name'){
 					uf.altValue = {name: propertyName, value: value};
 				}
 				// if it's an e-* property element
 				if(modules.utils.startWith(parentPropertyName,'e-') && modules.utils.startWith(propertyName,'e-')){
@@ -319,121 +319,121 @@ var Modules = (function (modules) {
 				}
 				// if it's an u-* property element
 				if(modules.utils.startWith(parentPropertyName,'u-') && propertyName === 'u-url'){
 					uf.altValue = {name: propertyName, value: value};
 				}
 			}
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * if a h-feed does not have a title use the title tag of a page
 		 *
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */	
+		 */
 		modules.Parser.prototype.impliedhFeedTitle = function( uf ){
 			if(uf.type && uf.type.indexOf('h-feed') > -1){
 				// has no name property
 				if(uf.properties.name === undefined || uf.properties.name[0] === '' ){
 					// use the text from the title tag
 					var title = modules.domUtils.querySelector(this.document, 'title');
 					if(title){
 						uf.properties.name = [modules.domUtils.textContent(title)];
 					}
 				}
 			}
 			return uf;
 		};
-		
-		
-		
+
+
+
 	    /**
 		 * implied Geo from pattern <abbr class="p-geo" title="37.386013;-122.082932">
 		 *
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */	
+		 */
 		modules.Parser.prototype.impliedGeo = function( uf ){
 			var geoPair,
 				parts,
 				longitude,
 				latitude,
 				valid = true;
-			
+
 			if(uf.type && uf.type.indexOf('h-geo') > -1){
-				
+
 				// has no latitude or longitude property
 				if(uf.properties.latitude === undefined || uf.properties.longitude === undefined ){
 
 					geoPair = (uf.properties.name)? uf.properties.name[0] : null;
 					geoPair = (!geoPair && uf.properties.value)? uf.properties.value : geoPair;
-					
+
 					if(geoPair){
 						// allow for the use of a ';' as in microformats and also ',' as in Geo URL
 						geoPair = geoPair.replace(';',',');
-						
+
 						// has sep char
 						if(geoPair.indexOf(',') > -1 ){
 							parts = geoPair.split(',');
-							
+
 							// only correct if we have two or more parts
 							if(parts.length > 1){
 
-								// latitude no value outside the range -90 or 90 
+								// latitude no value outside the range -90 or 90
 								latitude = parseFloat( parts[0] );
 								if(modules.utils.isNumber(latitude) && latitude > 90 || latitude < -90){
 									valid = false;
 								}
-								
+
 								// longitude no value outside the range -180 to 180
 								longitude = parseFloat( parts[1] );
 								if(modules.utils.isNumber(longitude) && longitude > 180 || longitude < -180){
 									valid = false;
 								}
-								
+
 								if(valid){
 									uf.properties.latitude = [latitude];
 									uf.properties.longitude  = [longitude];
 								}
 							}
-							
+
 						}
 					}
 				}
 			}
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * if a backwards compat built structure has no properties add name through this.impliedName
 		 *
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */	
+		 */
 		modules.Parser.prototype.impliedBackwardComp = function(node, uf, parentClasses){
-			
+
 			// look for pattern in parent classes like "p-geo h-geo"
 			// these are structures built from backwards compat parsing of geo
 			if(parentClasses.root.length === 1 && parentClasses.properties.length === 1) {
 				if(parentClasses.root[0].replace('h-','') === this.removePropPrefix(parentClasses.properties[0][0])) {
-					
+
 					// if microformat has no properties apply the impliedName rule to get value from containing node
 					// this will get value from html such as <abbr class="geo" title="30.267991;-97.739568">Brighton</abbr>
 					if( modules.utils.hasProperties(uf.properties) === false ){
 						uf = this.impliedName( node, uf );
 					}
 				}
 			}
-			
+
 			return uf;
 		};
-		
-		
-	
+
+
+
 	}
 
 	return modules;
 
 } (Modules || {}));
--- a/toolkit/components/microformats/test/lib/parser-includes.js
+++ b/toolkit/components/microformats/test/lib/parser-includes.js
@@ -1,150 +1,150 @@
 /*!
 	Parser includes
 	All the functions that deal with microformats v1 include rules
-	
+
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
 	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 	Dependencies  dates.js, domutils.js, html.js, isodate,js, text.js, utilities.js
 */
 
 
 var Modules = (function (modules) {
-	
+
 	// check parser module is loaded
 	if(modules.Parser){
-	
-		
+
+
 		/**
 		 * appends clones of include Nodes into the DOM structure
 		 *
 		 * @param  {DOM node} rootNode
-		 */	
+		 */
 		modules.Parser.prototype.addIncludes = function(rootNode) {
 			this.addAttributeIncludes(rootNode, 'itemref');
 			this.addAttributeIncludes(rootNode, 'headers');
 			this.addClassIncludes(rootNode);
 		};
-	
-		
+
+
 		/**
 		 * appends clones of include Nodes into the DOM structure for attribute based includes
 		 *
 		 * @param  {DOM node} rootNode
 		 * @param  {String} attributeName
 		 */
 		modules.Parser.prototype.addAttributeIncludes = function(rootNode, attributeName) {
 			var arr,
 				idList,
 				i,
 				x,
 				z,
 				y;
-	
+
 			arr = modules.domUtils.getNodesByAttribute(rootNode, attributeName);
 			x = 0;
 			i = arr.length;
 			while(x < i) {
 				idList = modules.domUtils.getAttributeList(arr[x], attributeName);
 				if(idList) {
 					z = 0;
 					y = idList.length;
 					while(z < y) {
 						this.apppendInclude(arr[x], idList[z]);
 						z++;
 					}
 				}
 				x++;
 			}
 		};
-	
-		
+
+
 		/**
 		 * appends clones of include Nodes into the DOM structure for class based includes
 		 *
 		 * @param  {DOM node} rootNode
 		 */
 		modules.Parser.prototype.addClassIncludes = function(rootNode) {
 			var id,
 				arr,
 				x = 0,
 				i;
-	
+
 			arr = modules.domUtils.getNodesByAttributeValue(rootNode, 'class', 'include');
 			i = arr.length;
 			while(x < i) {
 				id = modules.domUtils.getAttrValFromTagList(arr[x], ['a'], 'href');
 				if(!id) {
 					id = modules.domUtils.getAttrValFromTagList(arr[x], ['object'], 'data');
 				}
 				this.apppendInclude(arr[x], id);
 				x++;
 			}
 		};
-	
-	
+
+
 		/**
 		 * appends a clone of an include into another Node using Id
 		 *
 		 * @param  {DOM node} rootNode
 		 * @param  {Stringe} id
 		 */
 		modules.Parser.prototype.apppendInclude = function(node, id){
 			var include,
 				clone;
-	
+
 			id = modules.utils.trim(id.replace('#', ''));
 			include = modules.domUtils.getElementById(this.document, id);
 			if(include) {
 				clone = modules.domUtils.clone(include);
 				this.markIncludeChildren(clone);
 				modules.domUtils.appendChild(node, clone);
 			}
 		};
-	
-		
+
+
 		/**
-		 * adds an attribute marker to all the child microformat roots 
+		 * adds an attribute marker to all the child microformat roots
 		 *
 		 * @param  {DOM node} rootNode
-		 */ 
+		 */
 		modules.Parser.prototype.markIncludeChildren = function(rootNode) {
 			var arr,
 				x,
 				i;
-	
+
 			// loop the array and add the attribute
 			arr = this.findRootNodes(rootNode);
 			x = 0;
 			i = arr.length;
 			modules.domUtils.setAttribute(rootNode, 'data-include', 'true');
 			modules.domUtils.setAttribute(rootNode, 'style', 'display:none');
 			while(x < i) {
 				modules.domUtils.setAttribute(arr[x], 'data-include', 'true');
 				x++;
 			}
 		};
-		
-		
+
+
 		/**
-		 * removes all appended include clones from DOM 
+		 * removes all appended include clones from DOM
 		 *
 		 * @param  {DOM node} rootNode
-		 */ 
+		 */
 		modules.Parser.prototype.removeIncludes = function(rootNode){
 			var arr,
 				i;
-	
+
 			// remove all the items that were added as includes
 			arr = modules.domUtils.getNodesByAttribute(rootNode, 'data-include');
 			i = arr.length;
 			while(i--) {
 				modules.domUtils.removeChild(rootNode,arr[i]);
 			}
 		};
-	
-		
+
+
 	}
 
 	return modules;
 
 } (Modules || {}));
--- a/toolkit/components/microformats/test/lib/parser-rels.js
+++ b/toolkit/components/microformats/test/lib/parser-rels.js
@@ -1,23 +1,23 @@
 /*!
 	Parser rels
 	All the functions that deal with microformats v2 rel structures
-	
+
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
 	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 	Dependencies  dates.js, domutils.js, html.js, isodate,js, text.js,  utilities.js, url.js
 */
 
 
 var Modules = (function (modules) {
-	
+
 	// check parser module is loaded
 	if(modules.Parser){
-	
+
 		/**
 		 * finds rel=* structures
 		 *
 		 * @param  {DOM node} rootNode
 		 * @return {Object}
 		 */
 		modules.Parser.prototype.findRels = function(rootNode) {
 			var out = {
@@ -29,172 +29,172 @@ var Modules = (function (modules) {
 				i,
 				y,
 				z,
 				relList,
 				items,
 				item,
 				value,
 				arr;
-	
+
 			arr = modules.domUtils.getNodesByAttribute(rootNode, 'rel');
 			x = 0;
 			i = arr.length;
 			while(x < i) {
 				relList = modules.domUtils.getAttribute(arr[x], 'rel');
-	
+
 				if(relList) {
 					items = relList.split(' ');
-					
-					
+
+
 					// add rels
 					z = 0;
 					y = items.length;
 					while(z < y) {
 						item = modules.utils.trim(items[z]);
-	
+
 						// get rel value
 						value = modules.domUtils.getAttrValFromTagList(arr[x], ['a', 'area'], 'href');
 						if(!value) {
 							value = modules.domUtils.getAttrValFromTagList(arr[x], ['link'], 'href');
 						}
-	
+
 						// create the key
 						if(!out.rels[item]) {
 							out.rels[item] = [];
 						}
-	
+
 						if(typeof this.options.baseUrl === 'string' && typeof value === 'string') {
-					
+
 							var resolved = modules.url.resolve(value, this.options.baseUrl);
 							// do not add duplicate rels - based on resolved URLs
 							if(out.rels[item].indexOf(resolved) === -1){
 								out.rels[item].push( resolved );
 							}
 						}
 						z++;
 					}
-					
-					
+
+
 					var url = null;
 					if(modules.domUtils.hasAttribute(arr[x], 'href')){
 						url = modules.domUtils.getAttribute(arr[x], 'href');
 						if(url){
 							url = modules.url.resolve(url, this.options.baseUrl );
 						}
 					}
-	
-					
+
+
 					// add to rel-urls
 					var relUrl = this.getRelProperties(arr[x]);
 					relUrl.rels = items;
 					// // do not add duplicate rel-urls - based on resolved URLs
 					if(url && out['rel-urls'][url] === undefined){
 						out['rel-urls'][url] = relUrl;
 					}
-	
-			
+
+
 				}
 				x++;
 			}
 			return out;
 		};
-		
-		
+
+
 		/**
 		 * gets the properties of a rel=*
 		 *
 		 * @param  {DOM node} node
 		 * @return {Object}
 		 */
 		modules.Parser.prototype.getRelProperties = function(node){
 			var obj = {};
-			
+
 			if(modules.domUtils.hasAttribute(node, 'media')){
 				obj.media = modules.domUtils.getAttribute(node, 'media');
 			}
 			if(modules.domUtils.hasAttribute(node, 'type')){
 				obj.type = modules.domUtils.getAttribute(node, 'type');
 			}
 			if(modules.domUtils.hasAttribute(node, 'hreflang')){
 				obj.hreflang = modules.domUtils.getAttribute(node, 'hreflang');
 			}
 			if(modules.domUtils.hasAttribute(node, 'title')){
 				obj.title = modules.domUtils.getAttribute(node, 'title');
 			}
 			if(modules.utils.trim(this.getPValue(node, false)) !== ''){
 				obj.text = this.getPValue(node, false);
-			}	
-			
+			}
+
 			return obj;
 		};
-		
-		
+
+
 		/**
 		 * finds any alt rel=* mappings for a given node/microformat
 		 *
 		 * @param  {DOM node} node
 		 * @param  {String} ufName
 		 * @return {String || undefined}
 		 */
 		modules.Parser.prototype.findRelImpied = function(node, ufName) {
 			var out,
 				map,
 				i;
-	
+
 			map = this.getMapping(ufName);
 			if(map) {
 				for(var key in map.properties) {
 					if (map.properties.hasOwnProperty(key)) {
 						var prop = map.properties[key],
 							propName = (prop.map) ? prop.map : 'p-' + key,
 							relCount = 0;
-		
-						// is property an alt rel=* mapping 
+
+						// is property an alt rel=* mapping
 						if(prop.relAlt && modules.domUtils.hasAttribute(node, 'rel')) {
 							i = prop.relAlt.length;
 							while(i--) {
 								if(modules.domUtils.hasAttributeValue(node, 'rel', prop.relAlt[i])) {
 									relCount++;
 								}
 							}
 							if(relCount === prop.relAlt.length) {
 								out = propName;
 							}
 						}
 					}
 				}
 			}
 			return out;
 		};
-		
-		
+
+
 		/**
 		 * returns whether a node or its children has rel=* microformat
 		 *
 		 * @param  {DOM node} node
 		 * @return {Boolean}
 		 */
 		modules.Parser.prototype.hasRel = function(node) {
 			return (this.countRels(node) > 0);
 		};
-		
-		
+
+
 		/**
 		 * returns the number of rel=* microformats
 		 *
 		 * @param  {DOM node} node
 		 * @return {Int}
 		 */
 		modules.Parser.prototype.countRels = function(node) {
 			if(node){
 				return modules.domUtils.getNodesByAttribute(node, 'rel').length;
 			}
 			return 0;
 		};
-	
-	
-		
+
+
+
 	}
 
 	return modules;
 
 } (Modules || {}));
--- a/toolkit/components/microformats/test/lib/text.js
+++ b/toolkit/components/microformats/test/lib/text.js
@@ -1,41 +1,41 @@
 /*
 	text
-	Extracts text string from DOM nodes. Was created to extract text in a whitespace-normalized form. 
-	It works like a none-CSS aware version of IE's innerText function. DO NOT replace this module 
+	Extracts text string from DOM nodes. Was created to extract text in a whitespace-normalized form.
+	It works like a none-CSS aware version of IE's innerText function. DO NOT replace this module
 	with functions such as textContent as it will reduce the quality of data provided to the API user.
-	
+
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
 	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 	Dependencies  utilities.js, domutils.js
 */
 
 
 var Modules = (function (modules) {
-	
-	
+
+
 	modules.text = {
-		
+
 		// normalised or whitespace or whitespacetrimmed
-		textFormat: 'whitespacetrimmed', 
-		
+		textFormat: 'whitespacetrimmed',
+
 		// block level tags, used to add line returns
 		blockLevelTags: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'hr', 'pre', 'table',
-			'address', 'article', 'aside', 'blockquote', 'caption', 'col', 'colgroup', 'dd', 'div', 
-			'dt', 'dir', 'fieldset', 'figcaption', 'figure', 'footer', 'form',  'header', 'hgroup', 'hr', 
-			'li', 'map', 'menu', 'nav', 'optgroup', 'option', 'section', 'tbody', 'testarea', 
+			'address', 'article', 'aside', 'blockquote', 'caption', 'col', 'colgroup', 'dd', 'div',
+			'dt', 'dir', 'fieldset', 'figcaption', 'figure', 'footer', 'form',  'header', 'hgroup', 'hr',
+			'li', 'map', 'menu', 'nav', 'optgroup', 'option', 'section', 'tbody', 'testarea',
 			'tfoot', 'th', 'thead', 'tr', 'td', 'ul', 'ol', 'dl', 'details'],
 
-		// tags to exclude 
+		// tags to exclude
 		excludeTags: ['noframe', 'noscript', 'template', 'script', 'style', 'frames', 'frameset'],
- 
-	
+
+
 		/**
-		 * parses the text from the DOM Node 
+		 * parses the text from the DOM Node
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {String} textFormat
 		 * @return {String}
 		 */
 		parse: function(doc, node, textFormat){
 			var out;
 			this.textFormat = (textFormat)? textFormat : this.textFormat;
@@ -45,107 +45,107 @@ var Modules = (function (modules) {
 					return this.normalise( doc, out );
 				}else{
 					return '';
 				}
 			}else{
 			   return this.formatText( doc, modules.domUtils.textContent(node), this.textFormat );
 			}
 		},
-		
-		
+
+
 		/**
-		 * parses the text from a html string 
+		 * parses the text from a html string
 		 *
 		 * @param  {DOM Document} doc
 		 * @param  {String} text
 		 * @param  {String} textFormat
 		 * @return {String}
-		 */  
+		 */
 		parseText: function( doc, text, textFormat ){
 		   var node = modules.domUtils.createNodeWithText( 'div', text );
 		   return this.parse( doc, node, textFormat );
 		},
-		
-		
+
+
 		/**
 		 * parses the text from a html string - only for whitespace or whitespacetrimmed formats
 		 *
 		 * @param  {String} text
 		 * @param  {String} textFormat
 		 * @return {String}
-		 */  
+		 */
 		formatText: function( doc, text, textFormat ){
 		   this.textFormat = (textFormat)? textFormat : this.textFormat;
 		   if(text){
 			  var out = '',
 				  regex = /(<([^>]+)>)/ig;
-				
-			  out = text.replace(regex, '');   
-			  if(this.textFormat === 'whitespacetrimmed') {    
+
+			  out = text.replace(regex, '');
+			  if(this.textFormat === 'whitespacetrimmed') {
 				 out = modules.utils.trimWhitespace( out );
 			  }
-			  
+
 			  //return entities.decode( out, 2 );
 			  return modules.domUtils.decodeEntities( doc, out );
 		   }else{
-			  return ''; 
+			  return '';
 		   }
 		},
-		
-		
+
+
 		/**
-		 * normalises whitespace in given text 
+		 * normalises whitespace in given text
 		 *
 		 * @param  {String} text
 		 * @return {String}
-		 */ 
+		 */
 		normalise: function( doc, text ){
 			text = text.replace( /&nbsp;/g, ' ') ;    // exchanges html entity for space into space char
 			text = modules.utils.collapseWhiteSpace( text );     // removes linefeeds, tabs and addtional spaces
 			text = modules.domUtils.decodeEntities( doc, text );  // decode HTML entities
 			text = text.replace( '–', '-' );          // correct dash decoding
 			return modules.utils.trim( text );
 		},
-		
-	 
+
+
 		/**
 		 * walks DOM tree parsing the text from DOM Nodes
 		 *
 		 * @param  {DOM Node} node
 		 * @return {String}
-		 */ 
+		 */
 		walkTreeForText: function( node ) {
 			var out = '',
 				j = 0;
-	
+
 			if(node.tagName && this.excludeTags.indexOf( node.tagName.toLowerCase() ) > -1){
 				return out;
 			}
-	
+
 			// if node is a text node get its text
 			if(node.nodeType && node.nodeType === 3){
-				out += modules.domUtils.getElementText( node ); 
+				out += modules.domUtils.getElementText( node );
 			}
-	
+
 			// get the text of the child nodes
 			if(node.childNodes && node.childNodes.length > 0){
 				for (j = 0; j < node.childNodes.length; j++) {
 					var text = this.walkTreeForText( node.childNodes[j] );
 					if(text !== undefined){
 						out += text;
 					}
 				}
 			}
-	
+
 			// if it's a block level tag add an additional space at the end
 			if(node.tagName && this.blockLevelTags.indexOf( node.tagName.toLowerCase() ) !== -1){
 				out += ' ';
-			} 
-			
+			}
+
 			return (out === '')? undefined : out ;
 		}
-		
+
 	};
-   
+
 	return modules;
 
 } (Modules || {}));
--- a/toolkit/components/microformats/test/lib/utilities.js
+++ b/toolkit/components/microformats/test/lib/utilities.js
@@ -1,204 +1,204 @@
 /*
    Utilities
-   
+
    Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
    MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 var Modules = (function (modules) {
-	
+
 	modules.utils = {
-		
+
 		/**
 		 * is the object a string
 		 *
 		 * @param  {Object} obj
 		 * @return {Boolean}
 		 */
 		isString: function( obj ) {
 			return typeof( obj ) === 'string';
 		},
-		
+
 		/**
 		 * is the object a number
 		 *
 		 * @param  {Object} obj
 		 * @return {Boolean}
 		 */
 		isNumber: function( obj ) {
 			return !isNaN(parseFloat( obj )) && isFinite( obj );
 		},
-		
-		
+
+
 		/**
 		 * is the object an array
 		 *
 		 * @param  {Object} obj
 		 * @return {Boolean}
 		 */
 		isArray: function( obj ) {
 			return obj && !( obj.propertyIsEnumerable( 'length' ) ) && typeof obj === 'object' && typeof obj.length === 'number';
 		},
-		
-		
+
+
 		/**
 		 * is the object a function
 		 *
 		 * @param  {Object} obj
 		 * @return {Boolean}
 		 */
 		isFunction: function(obj) {
 			return !!(obj && obj.constructor && obj.call && obj.apply);
 		},
-	
-	
+
+
 		/**
 		 * does the text start with a test string
 		 *
 		 * @param  {String} text
 		 * @param  {String} test
 		 * @return {Boolean}
 		 */
 		startWith: function( text, test ) {
 			return(text.indexOf(test) === 0);
 		},
-	
-		
+
+
 		/**
 		 * removes spaces at front and back of text
 		 *
 		 * @param  {String} text
 		 * @return {String}
 		 */
 		trim: function( text ) {
 			if(text && this.isString(text)){
 				return (text.trim())? text.trim() : text.replace(/^\s+|\s+$/g, '');
 			}else{
 				return '';
 			}
 		},
-		
-		
+
+
 		/**
 		 * replaces a character in text
 		 *
 		 * @param  {String} text
 		 * @param  {Int} index
 		 * @param  {String} character
 		 * @return {String}
 		 */
 		replaceCharAt: function( text, index, character ) {
 			if(text && text.length > index){
-			   return text.substr(0, index) + character + text.substr(index+character.length); 
+			   return text.substr(0, index) + character + text.substr(index+character.length);
 			}else{
 				return text;
 			}
 		},
-		
-		
+
+
 		/**
 		 * removes whitespace, tabs and returns from start and end of text
 		 *
 		 * @param  {String} text
 		 * @return {String}
 		 */
 		trimWhitespace: function( text ){
 			if(text && text.length){
 				var i = text.length,
 					x = 0;
-				
+
 				// turn all whitespace chars at end into spaces
 				while (i--) {
 					if(this.isOnlyWhiteSpace(text[i])){
 						text = this.replaceCharAt( text, i, ' ' );
 					}else{
 						break;
 					}
 				}
-				
+
 				// turn all whitespace chars at start into spaces
 				i = text.length;
 				while (x < i) {
 					if(this.isOnlyWhiteSpace(text[x])){
 						text = this.replaceCharAt( text, i, ' ' );
 					}else{
 						break;
 					}
 					x++;
 				}
 			}
 			return this.trim(text);
 		},
-	
-	
+
+
 		/**
 		 * does text only contain whitespace characters
 		 *
 		 * @param  {String} text
 		 * @return {Boolean}
 		 */
 		isOnlyWhiteSpace: function( text ){
 			return !(/[^\t\n\r ]/.test( text ));
 		},
-		
-		
+
+
 		/**
 		 * removes whitespace from text (leaves a single space)
 		 *
 		 * @param  {String} text
 		 * @return {Sring}
 		 */
 		collapseWhiteSpace: function( text ){
 			return text.replace(/[\t\n\r ]+/g, ' ');
 		},
-	
-	
+
+
 		/**
 		 * does an object have any of its own properties
 		 *
 		 * @param  {Object} obj
 		 * @return {Boolean}
-		 */ 
+		 */
 		hasProperties: function( obj ) {
 			var key;
 			for(key in obj) {
 				if( obj.hasOwnProperty( key ) ) {
 					return true;
 				}
 			}
 			return false;
 		},
-		
-		
+
+
 		/**
 		 * a sort function - to sort objects in an array by a given property
 		 *
 		 * @param  {String} property
 		 * @param  {Boolean} reverse
 		 * @return {Int}
-		 */ 
+		 */
 		sortObjects: function(property, reverse) {
 			reverse = (reverse) ? -1 : 1;
 			return function (a, b) {
 				a = a[property];
 				b = b[property];
 				if (a < b) {
 					return reverse * -1;
 				}
 				if (a > b) {
 					return reverse * 1;
 				}
 				return 0;
 			};
 		}
-		
+
 	};
-	
+
 	return modules;
 
 } (Modules || {}));
 
 
 
 
 
--- a/toolkit/components/microformats/test/module-tests/dates-test.js
+++ b/toolkit/components/microformats/test/module-tests/dates-test.js
@@ -1,113 +1,113 @@
 /*
 Unit test for dates
 */
 
 assert = chai.assert;
 
-// Tests the private Modules.dates object 
-// Modules.dates is unit tested as it has an interface access by other modules  
+// Tests the private Modules.dates object
+// Modules.dates is unit tested as it has an interface access by other modules
 
 
 describe('Modules.dates', function() {
-    
-   
+
+
    it('hasAM', function(){
        assert.isTrue( Modules.dates.hasAM( '5am' ) );
        assert.isTrue( Modules.dates.hasAM( '5AM' ) );
        assert.isTrue( Modules.dates.hasAM( '5 am' ) );
        assert.isTrue( Modules.dates.hasAM( '5a.m.' ) );
        assert.isTrue( Modules.dates.hasAM( '5:20 a.m.' ) );
        assert.isFalse( Modules.dates.hasAM( '5pm' ) );
    });
-   
-   
+
+
    it('hasPM', function(){
        assert.isTrue( Modules.dates.hasPM( '5pm' ) );
        assert.isTrue( Modules.dates.hasPM( '5PM' ) );
        assert.isTrue( Modules.dates.hasPM( '5 pm' ) );
        assert.isTrue( Modules.dates.hasPM( '5p.m.' ) );
        assert.isTrue( Modules.dates.hasPM( '5:20 p.m.' ) );
        assert.isFalse( Modules.dates.hasPM( '5am' ) );
    });
-   
-   
+
+
    it('removeAMPM', function(){
        assert.equal( Modules.dates.removeAMPM( '5pm' ), '5' );
        assert.equal( Modules.dates.removeAMPM( '5 pm' ), '5 ' );
        assert.equal( Modules.dates.removeAMPM( '5p.m.' ), '5' );
        assert.equal( Modules.dates.removeAMPM( '5am' ), '5' );
        assert.equal( Modules.dates.removeAMPM( '5a.m.' ), '5' );
        assert.equal( Modules.dates.removeAMPM( '5' ), '5' );
    });
-   
-   
+
+
    it('isDuration', function(){
        assert.isTrue( Modules.dates.isDuration( 'PY17M' ) );
        assert.isTrue( Modules.dates.isDuration( 'PW12' ) );
        assert.isTrue( Modules.dates.isDuration( 'P0.5Y' ) );
        assert.isTrue( Modules.dates.isDuration( 'P3Y6M4DT12H30M5S' ) );
        assert.isFalse( Modules.dates.isDuration( '2015-01-23T13:45' ) );
        assert.isFalse( Modules.dates.isDuration( '2015-01-23 13:45' ) );
        assert.isFalse( Modules.dates.isDuration( '20150123T1345' ) );
    });
-   
-   
+
+
    it('isTime', function(){
        assert.isTrue( Modules.dates.isTime( '8:43' ) );
        assert.isTrue( Modules.dates.isTime( '08:43' ) );
        assert.isTrue( Modules.dates.isTime( '15:23:00:0567' ) );
        assert.isTrue( Modules.dates.isTime( '10:34pm' ) );
        assert.isTrue( Modules.dates.isTime( '10:34 p.m.' ) );
        assert.isTrue( Modules.dates.isTime( '+01:00:00' ) );
        assert.isTrue( Modules.dates.isTime( '-02:00' ) );
        assert.isTrue( Modules.dates.isTime( 'z15:00' ) );
        assert.isTrue( Modules.dates.isTime( '0843' ) );
        assert.isFalse( Modules.dates.isTime( 'P3Y6M4DT12H30M5S' ) );
        assert.isFalse( Modules.dates.isTime( '2015-01-23T13:45' ) );
        assert.isFalse( Modules.dates.isTime( '2015-01-23 13:45' ) );
        assert.isFalse( Modules.dates.isTime( '20150123T1345' ) );
        assert.isFalse( Modules.dates.isTime( 'abc' ) );
-       assert.isFalse( Modules.dates.isTime( '12345' ) ); 
+       assert.isFalse( Modules.dates.isTime( '12345' ) );
    });
-   
-   
+
+
    it('parseAmPmTime', function(){
        assert.equal( Modules.dates.parseAmPmTime( '5am' ), '05' );
        assert.equal( Modules.dates.parseAmPmTime( '12pm' ), '12' );
        assert.equal( Modules.dates.parseAmPmTime( '5a.m.' ), '05' );
        assert.equal( Modules.dates.parseAmPmTime( '5pm' ), '17' );
        assert.equal( Modules.dates.parseAmPmTime( '5:34pm' ), '17:34' );
        assert.equal( Modules.dates.parseAmPmTime( '5:04pm' ), '17:04' );
        assert.equal( Modules.dates.parseAmPmTime( '05:34:00' ), '05:34:00' );
        assert.equal( Modules.dates.parseAmPmTime( '05:34:00' ), '05:34:00' );
        assert.equal( Modules.dates.parseAmPmTime( '1:52:04pm' ), '13:52:04' );
    });
-   
-      
+
+
    it('dateTimeUnion', function(){
        assert.equal( Modules.dates.dateTimeUnion( '2015-01-23', '05:34:00', 'HTML5' ).toString('HTML5'), '2015-01-23 05:34:00' );
        assert.equal( Modules.dates.dateTimeUnion( '2015-01-23', '05:34', 'HTML5' ).toString('HTML5'), '2015-01-23 05:34' );
        assert.equal( Modules.dates.dateTimeUnion( '2015-01-23', '05', 'HTML5' ).toString('HTML5'), '2015-01-23 05' );
        assert.equal( Modules.dates.dateTimeUnion( '2009-06-26T19:00', '2200', 'HTML5' ).toString('HTML5'), '2009-06-26 22:00' );
 
        assert.equal( Modules.dates.dateTimeUnion( '2015-01-23', '', 'HTML5' ).toString('HTML5'), '2015-01-23' );
        assert.equal( Modules.dates.dateTimeUnion( '', '', 'HTML5' ).toString('HTML5'), '' );
    });
-   
-   
+
+
    it('concatFragments', function(){
        assert.equal( Modules.dates.concatFragments( ['2015-01-23', '05:34:00'], 'HTML5' ).toString('HTML5'), '2015-01-23 05:34:00' );
        assert.equal( Modules.dates.concatFragments( ['05:34:00', '2015-01-23'], 'HTML5' ).toString('HTML5'), '2015-01-23 05:34:00' );
        assert.equal( Modules.dates.concatFragments( ['2015-01-23T05:34:00'], 'HTML5' ).toString('HTML5'), '2015-01-23 05:34:00' );
        assert.equal( Modules.dates.concatFragments( ['2015-01-23', '05:34:00', 'z'], 'HTML5' ).toString('HTML5'), '2015-01-23 05:34:00Z' );
        assert.equal( Modules.dates.concatFragments( ['2015-01-23', '05:34', '-01'], 'HTML5' ).toString('HTML5'), '2015-01-23 05:34-01' );
        assert.equal( Modules.dates.concatFragments( ['2015-01-23', '05:34', '-01:00'], 'HTML5' ).toString('HTML5'), '2015-01-23 05:34-01:00' );
        assert.equal( Modules.dates.concatFragments( ['2015-01-23', '05:34-01:00'], 'HTML5' ).toString('HTML5'), '2015-01-23 05:34-01:00' );
-       
+
    });
-   
-   
 
 
-   
+
+
+
 });
--- a/toolkit/components/microformats/test/module-tests/domutils-test.js
+++ b/toolkit/components/microformats/test/module-tests/domutils-test.js
@@ -1,206 +1,206 @@
 /*
 Unit test for domutils
 */
 
 assert = chai.assert;
 
 
-// Tests the private Modules.domUtils object 
-// Modules.domUtils is unit tested as it has an interface access by other modules  
+// Tests the private Modules.domUtils object
+// Modules.domUtils is unit tested as it has an interface access by other modules
 
 
 describe('Modules.domutils', function() {
-    
+
 
    it('ownerDocument', function(){
-       var node = document.createElement('div'); 
+       var node = document.createElement('div');
        assert.equal( Modules.domUtils.ownerDocument( node ).nodeType,  9);
    });
-    
-    
+
+
    it('innerHTML', function(){
        var html = '<a href="http://glennjones.net">Glenn Jones</a>',
            node = document.createElement('div');
-           
+
        node.innerHTML = html;
        assert.equal( Modules.domUtils.innerHTML( node ), html );
    });
-   
-   
+
+
    it('hasAttribute', function(){
        var node = document.createElement('a');
-           
+
        node.href = 'http://glennjones.net';
        assert.isTrue( Modules.domUtils.hasAttribute( node, 'href' ) );
        assert.isFalse( Modules.domUtils.hasAttribute( node, 'class' ) );
    });
-   
-   
+
+
    it('hasAttributeValue', function(){
        var node = document.createElement('a');
-           
+
        node.href = 'http://glennjones.net';
        assert.isTrue( Modules.domUtils.hasAttributeValue( node, 'href', 'http://glennjones.net' ) );
        assert.isFalse( Modules.domUtils.hasAttributeValue( node, 'href', 'http://example.net' ) );
        assert.isFalse( Modules.domUtils.hasAttributeValue( node, 'class', 'test' ) );
    });
-   
-   
+
+
    it('getAttribute', function(){
        var node = document.createElement('a');
-           
+
        node.href = 'http://glennjones.net';
        assert.equal( Modules.domUtils.getAttribute( node, 'href' ),  'http://glennjones.net' );
    });
-   
-   
+
+
    it('setAttribute', function(){
        var node = document.createElement('a');
-           
+
        Modules.domUtils.setAttribute(node, 'href', 'http://glennjones.net')
        assert.equal( Modules.domUtils.getAttribute( node, 'href' ),  'http://glennjones.net' );
    });
-   
-   
+
+
    it('removeAttribute', function(){
        var node = document.createElement('a');
-           
+
        node.href = 'http://glennjones.net';
        Modules.domUtils.removeAttribute(node, 'href')
        assert.isFalse( Modules.domUtils.hasAttribute( node, 'href' ) );
    });
-   
+
 
    it('getAttributeList', function(){
        var node = document.createElement('a');
-           
+
        node.rel = 'next';
        assert.deepEqual( Modules.domUtils.getAttributeList( node, 'rel'),  ['next'] );
        node.rel = 'next bookmark';
        assert.deepEqual( Modules.domUtils.getAttributeList( node, 'rel'),  ['next','bookmark'] );
    });
-   
-   
+
+
    it('hasAttributeValue', function(){
        var node = document.createElement('a');
-           
+
        node.href = 'http://glennjones.net';
        node.rel = 'next bookmark';
        assert.isTrue( Modules.domUtils.hasAttributeValue( node, 'href', 'http://glennjones.net' ) );
        assert.isFalse( Modules.domUtils.hasAttributeValue( node, 'href', 'http://codebits.glennjones.net' ) );
        assert.isFalse( Modules.domUtils.hasAttributeValue( node, 'class', 'p-name' ) );
        assert.isTrue( Modules.domUtils.hasAttributeValue( node, 'rel', 'bookmark' ) );
        assert.isFalse( Modules.domUtils.hasAttributeValue( node, 'rel', 'previous' ) );
    });
-   
-   
+
+
    it('getNodesByAttribute', function(){
        var node = document.createElement('ul');
        node.innerHTML = '<li class="h-card">one</li><li>two</li><li class="h-card">three</li>';
-           
+
        assert.equal( Modules.domUtils.getNodesByAttribute( node, 'class' ).length, 2 );
        assert.equal( Modules.domUtils.getNodesByAttribute( node, 'href' ).length, 0 );
    });
-   
-   
+
+
    it('getNodesByAttributeValue', function(){
        var node = document.createElement('ul');
        node.innerHTML = '<li class="h-card">one</li><li>two</li><li class="h-card">three</li><li class="p-name">four</li>';
-           
+
        assert.equal( Modules.domUtils.getNodesByAttributeValue( node, 'class', 'h-card' ).length, 2 );
        assert.equal( Modules.domUtils.getNodesByAttributeValue( node, 'class', 'p-name' ).length, 1 );
        assert.equal( Modules.domUtils.getNodesByAttributeValue( node, 'class', 'u-url' ).length, 0 );
    });
-   
+
 
    it('getAttrValFromTagList', function(){
        var node = document.createElement('a');
-           
+
        node.href = 'http://glennjones.net';
-           
+
        assert.equal( Modules.domUtils.getAttrValFromTagList( node, ['a','area'], 'href' ), 'http://glennjones.net' );
        assert.equal( Modules.domUtils.getAttrValFromTagList( node, ['a','area'], 'class' ), null );
        assert.equal( Modules.domUtils.getAttrValFromTagList( node, ['p'], 'href' ), null );
    });
-   
-   
+
+
    it('getSingleDescendant', function(){
        var html = '<a class="u-url" href="http://glennjones.net">Glenn Jones</a>',
            node = document.createElement('div');
-           
+
        node.innerHTML = html,
-       
-       // one instance of a element   
+
+       // one instance of a element
        assert.equal( Modules.domUtils.getSingleDescendant( node ).outerHTML, html );
-       
-       // two instances of a element  
+
+       // two instances of a element
        node.appendChild(document.createElement('a'));
        assert.equal( Modules.domUtils.getSingleDescendant( node ), null );
-       
+
    });
-   
+
 
    it('getSingleDescendantOfType', function(){
        var html = '<a class="u-url" href="http://glennjones.net">Glenn Jones</a>',
            node = document.createElement('div');
-           
+
        node.innerHTML = html,
-       
-       // one instance of a element   
+
+       // one instance of a element
        assert.equal( Modules.domUtils.getSingleDescendantOfType( node, ['a', 'link']).outerHTML, html );
        assert.equal( Modules.domUtils.getSingleDescendantOfType( node, ['img','area']), null );
-       
+
        node.appendChild(document.createElement('p'));
        assert.equal( Modules.domUtils.getSingleDescendantOfType( node, ['a', 'link']).outerHTML, html );
-       
-       // two instances of a element  
+
+       // two instances of a element
        node.appendChild(document.createElement('a'));
        assert.equal( Modules.domUtils.getSingleDescendantOfType( node, ['a', 'link']), null );
-      
+
    });
-   
-   
+
+
    it('appendChild', function(){
        var node = document.createElement('div'),
            child = document.createElement('a');
-           
-       Modules.domUtils.appendChild( node, child ); 
+
+       Modules.domUtils.appendChild( node, child );
        assert.equal( node.innerHTML, '<a></a>' );
    });
-   
-   
+
+
    it('removeChild', function(){
        var node = document.createElement('div'),
            child = document.createElement('a');
-           
-       node.appendChild(child)    
-      
-       assert.equal( node.innerHTML, '<a></a>' );     
-       Modules.domUtils.removeChild( child ); 
+
+       node.appendChild(child)
+
+       assert.equal( node.innerHTML, '<a></a>' );
+       Modules.domUtils.removeChild( child );
        assert.equal( node.innerHTML, '' );
    });
-   
-   
+
+
    it('clone', function(){
        var node = document.createElement('div');
-           
+
        node.innerHTML = 'text content';
        assert.equal( Modules.domUtils.clone( node ).outerHTML, '<div>text content</div>' );
    });
-   
+
 
    it('getElementText', function(){
        assert.equal(  Modules.domUtils.getElementText( {} ), '' );
    });
-   
-   
+
+
    it('getNodePath', function(){
        var node = document.createElement('ul');
        node.innerHTML = '<div><ul><li class="h-card">one</li><li>two</li><li class="h-card">three</li><li class="p-name">four</li></ul></div>';
-       var child = node.querySelector('.p-name');   
-             
+       var child = node.querySelector('.p-name');
+
        assert.deepEqual( Modules.domUtils.getNodePath( child ), [0,0,3] );
    });
-   
-   
+
+
 });
--- a/toolkit/components/microformats/test/module-tests/html-test.js
+++ b/toolkit/components/microformats/test/module-tests/html-test.js
@@ -1,50 +1,50 @@
 /*
 Unit test for html
 */
 
 assert = chai.assert;
 
-// Tests the private Modules.html object 
-// Modules.html is unit tested as it has an interface access by other modules  
+// Tests the private Modules.html object
+// Modules.html is unit tested as it has an interface access by other modules
 
 describe('Modules.html', function() {
-    
-    
+
+
    it('parse', function(){
        var html = '<a href="http://glennjones.net">Glenn Jones</a>',
            bloghtml = '<section id="content" class="body"><ol id="posts-list" class="h-feed"><li><article class="h-entry"><header><h2 class="p-namee"><a href="#" rel="bookmark" title="Permalink to this POST TITLE">This be the title</a></h2></header><footer class="post-info"><abbr class="dt-published" title="2005-10-10T14:07:00-07:00">10th October 2005</abbr><address class="h-card p-author">By <a class="u-url p-name" href="#">Enrique Ramírez</a></address></footer><div class="e-content"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque venenatis nunc vitae libero iaculis elementum. Nullam et justo <a href="#">non sapien</a> dapibus blandit nec et leo. Ut ut malesuada tellus.</p></div></article></li></ol></section>',
            node = document.createElement('div');
-           
+
        node.innerHTML = html;
        assert.equal(Modules.html.parse( node ), html );
-       
+
        // make sure excludes 'data-include' marked items
        var child = document.createElement('p');
        child.setAttribute('data-include', 'true');
        node.appendChild(child);
        assert.equal( Modules.html.parse( node ), html );
-       
+
        node = document.createElement('div');
        node.innerHTML = bloghtml;
        assert.equal( Modules.html.parse( node ), bloghtml );
-       
+
        node = document.createElement('div');
        assert.equal( Modules.html.parse( node ), '' );
-       
+
        child = document.createElement('br');
        node.appendChild(child);
        assert.equal( Modules.html.parse( node ), '<br />' );
-       
+
        node = document.createComment('test comment');
        assert.equal( Modules.html.parse( node ), '' );
-       
+
    });
-  
+
 
- 
+
 
-   
-   
-   
-   
+
+
+
+
 });
--- a/toolkit/components/microformats/test/module-tests/isodate-test.js
+++ b/toolkit/components/microformats/test/module-tests/isodate-test.js
@@ -1,145 +1,145 @@
 /*
 Unit test for dates
 */
 
 assert = chai.assert;
 
 
-// Tests private Modules.ISODate object 
-// Modules.ISODate is unit tested as it has an interface access by other modules  
+// Tests private Modules.ISODate object
+// Modules.ISODate is unit tested as it has an interface access by other modules
 
 
 describe('Modules.ISODates', function() {
-    
+
 
-   
+
    it('constructor', function(){
        assert.equal( new Modules.ISODate().toString('auto'), '' );
        assert.equal( new Modules.ISODate('2015-01-23T05:34:00', 'html5').toString('html5'), '2015-01-23 05:34:00' );
        assert.equal( new Modules.ISODate('2015-01-23T05:34:00', 'w3c').toString('w3c'), '2015-01-23T05:34:00' );
        assert.equal( new Modules.ISODate('2015-01-23T05:34:00', 'html5').toString('rfc3339'), '20150123T053400' );
        assert.equal( new Modules.ISODate('2015-01-23T05:34:00', 'auto').toString('auto'), '2015-01-23T05:34:00' );
    });
-   
-   
+
+
    it('parse', function(){
        assert.equal( new Modules.ISODate().parse('2015-01-23T05:34:00', 'html5').toString('html5'), '2015-01-23 05:34:00' );
        assert.equal( new Modules.ISODate().parse('2015-01-23T05:34:00', 'auto').toString('auto'), '2015-01-23T05:34:00' );
        assert.equal( new Modules.ISODate().parse('2015-01-23t05:34:00', 'auto').toString('auto'), '2015-01-23t05:34:00' );
-       
+
        assert.equal( new Modules.ISODate().parse('2015-01-23t05:34:00Z', 'auto').toString('auto'), '2015-01-23t05:34:00Z' );
        assert.equal( new Modules.ISODate().parse('2015-01-23t05:34:00z', 'auto').toString('auto'), '2015-01-23t05:34:00z' );
        assert.equal( new Modules.ISODate().parse('2015-01-23 05:34:00Z', 'auto').toString('auto'), '2015-01-23 05:34:00Z' );
        assert.equal( new Modules.ISODate().parse('2015-01-23 05:34', 'auto').toString('auto'), '2015-01-23 05:34' );
        assert.equal( new Modules.ISODate().parse('2015-01-23 05', 'auto').toString('auto'), '2015-01-23 05' );
-       
+
        assert.equal( new Modules.ISODate().parse('2015-01-23 05:34+01:00', 'auto').toString('auto'), '2015-01-23 05:34+01:00' );
        assert.equal( new Modules.ISODate().parse('2015-01-23 05:34-01:00', 'auto').toString('auto'), '2015-01-23 05:34-01:00' );
        assert.equal( new Modules.ISODate().parse('2015-01-23 05:34-01', 'auto').toString('auto'), '2015-01-23 05:34-01' );
-       
-       
+
+
        assert.equal( new Modules.ISODate().parse('2015-01-23', 'auto').toString('auto'), '2015-01-23' );
        // TODO support for importing rfc3339 profile dates
        // assert.equal( new Modules.ISODate().parse('20150123t0534', 'auto').toString('auto'), '2015-01-23 05:34' );
    });
-   
-   
+
+
    it('parseDate', function(){
        assert.equal( new Modules.ISODate().parseDate('2015-01-23T05:34:00', 'html5'), '2015-01-23' );
        assert.equal( new Modules.ISODate().parseDate('2015-01-23', 'auto'), '2015-01-23' );
        assert.equal( new Modules.ISODate().parseDate('2015-01', 'auto'), '2015-01' );
        assert.equal( new Modules.ISODate().parseDate('2015', 'auto'), '2015' );
        assert.equal( new Modules.ISODate().parseDate('2015-134', 'auto'), '2015-134' );
    });
-   
-   
+
+
    it('parseTime', function(){
        assert.equal( new Modules.ISODate().parseTime('05:34:00.1267', 'html5'), '05:34:00.1267' );
        assert.equal( new Modules.ISODate().parseTime('05:34:00', 'html5'), '05:34:00' );
        assert.equal( new Modules.ISODate().parseTime('05:34', 'html5'), '05:34' );
        assert.equal( new Modules.ISODate().parseTime('05', 'html5'), '05' );
    });
-   
+
    it('parseTimeZone', function(){
         var date = new Modules.ISODate();
         date.parseTime('14:00');
         assert.equal( date.parseTimeZone('-01:00', 'auto'), '14:00-01:00' );
-        
+
         date.clear();
         date.parseTime('14:00');
         assert.equal( date.parseTimeZone('-01', 'auto'), '14:00-01' );
-        
+
         date.clear();
         date.parseTime('14:00');
         assert.equal( date.parseTimeZone('+01:00', 'auto').toString('auto'), '14:00+01:00' );
-        
+
         date.clear();
         date.parseTime('15:00');
         assert.equal( date.parseTimeZone('Z', 'auto').toString('auto'), '15:00Z' );
-       
+
         date.clear();
         date.parseTime('16:00');
         assert.equal( date.parseTimeZone('z', 'auto'), '16:00z' );
-       
+
     });
-    
-    
-    
+
+
+
    it('toString', function(){
-       var date = new Modules.ISODate();    
+       var date = new Modules.ISODate();
        date.parseTime('05:34:00.1267');
-       
+
        assert.equal( date.toString('html5'), '05:34:00.1267' );
    });
-   
-   
+
+
    it('toTimeString', function(){
-       var date = new Modules.ISODate();    
+       var date = new Modules.ISODate();
        date.parseTime('05:34:00.1267');
-       
+
        assert.equal( date.toTimeString('html5'), '05:34:00.1267' );
    });
-   
-   
+
+
     it('hasFullDate', function(){
         var dateEmpty = new Modules.ISODate(),
             date = new Modules.ISODate('2015-01-23T05:34:00');
-        
-        assert.isFalse( dateEmpty.hasFullDate() ); 
-        assert.isTrue( date.hasFullDate() );    
+
+        assert.isFalse( dateEmpty.hasFullDate() );
+        assert.isTrue( date.hasFullDate() );
     });
-    
-    
+
+
     it('hasDate', function(){
        var dateEmpty = new Modules.ISODate(),
            date = new Modules.ISODate('2015-01-23');
-        
-        assert.isFalse( dateEmpty.hasDate() ); 
-        assert.isTrue( date.hasDate() );    
+
+        assert.isFalse( dateEmpty.hasDate() );
+        assert.isTrue( date.hasDate() );
     });
-    
-   
+
+
     it('hasTime', function(){
        var dateEmpty = new Modules.ISODate(),
            date = new Modules.ISODate();
-           
+
         date.parseTime('12:34');
-        
-        assert.isFalse( dateEmpty.hasTime() ); 
-        assert.isTrue( date.hasTime() );     
+
+        assert.isFalse( dateEmpty.hasTime() );
+        assert.isTrue( date.hasTime() );
     });
-    
-    
+
+
     it('hasTimeZone', function(){
        var dateEmpty = new Modules.ISODate(),
            date = new Modules.ISODate();
-           
+
         date.parseTime('12:34'),
         date.parseTimeZone('-01:00');
-        
-        assert.isFalse( dateEmpty.hasTimeZone() ); 
-        assert.isTrue( date.hasTimeZone() );     
+
+        assert.isFalse( dateEmpty.hasTimeZone() );
+        assert.isTrue( date.hasTimeZone() );
     });
-   
-   
+
+
 });
--- a/toolkit/components/microformats/test/module-tests/text-test.js
+++ b/toolkit/components/microformats/test/module-tests/text-test.js
@@ -1,56 +1,56 @@
 /*
 Unit test for text
 */
 
 assert = chai.assert;
 
-// Tests the private Modules.text object 
-// Modules.text is unit tested as it has an interface access by other modules  
+// Tests the private Modules.text object
+// Modules.text is unit tested as it has an interface access by other modules
 
 
 describe('Modules.text', function() {
-    
-    
+
+
    it('parse', function(){
        var html = '\n   <a href="http://glennjones.net">Glenn\n Jones  \n</a>   \n',
            node = document.createElement('div');
-                
+
        node.innerHTML = html;
        assert.equal( Modules.text.parse( document, node, 'whitespacetrimmed' ), 'Glenn\n Jones' );
        assert.equal( Modules.text.parse( document, node, 'whitespace' ), '\n   Glenn\n Jones  \n   \n' );
        assert.equal( Modules.text.parse( document, node, 'normalised' ), 'Glenn Jones' );
-       
+
        // exclude tags
        node.innerHTML = '<script>test</script>text';
        assert.equal( Modules.text.parse( document, node, 'normalised' ), 'text' );
-       
-       // block level 
+
+       // block level
        node.innerHTML = '<p>test</p>text';
        //assert.equal( Modules.text.parse( document, node, 'normalised' ), 'test text' );
-       
+
        // node with no text data
        node = document.createComment('test comment');
        assert.equal( Modules.text.parse( document, node, 'normalised' ), '' );
-       
+
    });
-   
-   
+
+
    it('parseText', function(){
        var text = '\n   <a href="http://glennjones.net">Glenn\n Jones  \n</a>   \n';
-       
+
        // create DOM context first
        Modules.domUtils.getDOMContext( {} );
-                
+
        assert.equal( Modules.text.parseText( document, text, 'whitespacetrimmed' ), 'Glenn\n Jones' );
        assert.equal( Modules.text.parseText( document, text, 'whitespace' ), '\n   Glenn\n Jones  \n   \n' );
        assert.equal( Modules.text.parseText( document, text, 'normalised' ), 'Glenn Jones' );
    });
-  
-   
-   it('formatText', function(){      
+
+
+   it('formatText', function(){
        assert.equal( Modules.text.formatText( document, null, 'whitespacetrimmed' ), '' );
    });
 
-   
-  
+
+
 });
--- a/toolkit/components/microformats/test/module-tests/url-test.js
+++ b/toolkit/components/microformats/test/module-tests/url-test.js
@@ -1,25 +1,25 @@
 /*
 Unit test for url
 */
 
 assert = chai.assert;
 
 
-// Tests the private Modules.url object 
-// Modules.url is unit tested as it has an interface access by other modules  
+// Tests the private Modules.url object
+// Modules.url is unit tested as it has an interface access by other modules
 
 
 describe('Modules.url', function() {
-    
+
    it('resolve', function(){
        assert.equal( Modules.url.resolve( 'docs/index.html', 'http://example.org' ), 'http://example.org/docs/index.html' );
        assert.equal( Modules.url.resolve( '../index.html', 'http://example.org/docs/' ), 'http://example.org/index.html' );
        assert.equal( Modules.url.resolve( '/', 'http://example.org/' ), 'http://example.org/' );
        assert.equal( Modules.url.resolve( 'http://glennjones.net/', 'http://example.org/' ), 'http://glennjones.net/' );
-       
+
        assert.equal( Modules.url.resolve( undefined, 'http://example.org/' ), '' );
        assert.equal( Modules.url.resolve( undefined, undefined ), '' );
        assert.equal( Modules.url.resolve( 'http://glennjones.net/', undefined ), 'http://glennjones.net/' );
    });
-  
+
 });
--- a/toolkit/components/microformats/test/module-tests/utilities-test.js
+++ b/toolkit/components/microformats/test/module-tests/utilities-test.js
@@ -1,93 +1,93 @@
 /*
 Unit test for utilities
 */
 
 assert = chai.assert;
 
-// Tests the private Modules.utils object 
-// Modules.utils is unit tested as it has an interface access by other modules  
+// Tests the private Modules.utils object
+// Modules.utils is unit tested as it has an interface access by other modules
 
 
 describe('Modules.utilities', function() {
-    
-    
-   it('isString', function(){     
+
+
+   it('isString', function(){
        assert.isTrue( Modules.utils.isString( 'abc' ) );
        assert.isFalse( Modules.utils.isString( 123 ) );
        assert.isFalse( Modules.utils.isString( 1.23 ) );
        assert.isFalse( Modules.utils.isString( {'abc': 'abc'} ) );
        assert.isFalse( Modules.utils.isString( ['abc'] ) );
        assert.isFalse( Modules.utils.isString( true ) );
    });
-   
-   
+
+
    it('isArray', function(){
        assert.isTrue( Modules.utils.isArray( ['abc'] ) );
        assert.isFalse( Modules.utils.isArray( 123 ) );
-       assert.isFalse( Modules.utils.isArray( 1.23 ) );  
+       assert.isFalse( Modules.utils.isArray( 1.23 ) );
        assert.isFalse( Modules.utils.isArray( 'abc' ) );
        assert.isFalse( Modules.utils.isArray( {'abc': 'abc'} ) );
        assert.isFalse( Modules.utils.isArray( true ) );
    });
-   
-   
+
+
    it('isNumber', function(){
        assert.isTrue( Modules.utils.isNumber( 123 ) );
-       assert.isTrue( Modules.utils.isNumber( 1.23 ) );  
+       assert.isTrue( Modules.utils.isNumber( 1.23 ) );
        assert.isFalse( Modules.utils.isNumber( 'abc' ) );
        assert.isFalse( Modules.utils.isNumber( {'abc': 'abc'} ) );
        assert.isFalse( Modules.utils.isNumber( ['abc'] ) );
        assert.isFalse( Modules.utils.isNumber( true ) );
    });
 
 
    it('startWith', function(){
        assert.isTrue( Modules.utils.startWith( 'p-name', 'p-' ) );
        assert.isFalse( Modules.utils.startWith( 'p-name', 'name' ) );
        assert.isFalse( Modules.utils.startWith( 'p-name', 'u-' ) );
    });
-   
-   
+
+
    it('trim', function(){
        assert.equal( Modules.utils.trim( ' Glenn Jones ' ), 'Glenn Jones' );
        assert.equal( Modules.utils.trim( 'Glenn Jones' ), 'Glenn Jones' );
        assert.equal( Modules.utils.trim( undefined ), '' );
    });
-   
-  
+
+
    it('replaceCharAt', function(){
        assert.equal( Modules.utils.replaceCharAt( 'Glenn Jones', 5, '-' ), 'Glenn-Jones' );
        assert.equal( Modules.utils.replaceCharAt( 'Glenn Jones', 50, '-' ), 'Glenn Jones' );
-   });   
-   
-   
+   });
+
+
    it('isOnlyWhiteSpace', function(){
        assert.isTrue( Modules.utils.isOnlyWhiteSpace( '  ') );
        assert.isTrue( Modules.utils.isOnlyWhiteSpace( '  \n\r') );
        assert.isFalse( Modules.utils.isOnlyWhiteSpace( '  text\n\r') );
    });
-   
-   
+
+
    it('collapseWhiteSpace', function(){
        assert.equal( Modules.utils.collapseWhiteSpace( '  '), ' ' );
        assert.equal( Modules.utils.collapseWhiteSpace( '  \n\r'), ' ' );
        assert.equal( Modules.utils.collapseWhiteSpace( '  text\n\r'), ' text ' );
-   }); 
-   
-   
+   });
+
+
    it('hasProperties', function(){
        assert.isTrue( Modules.utils.hasProperties( {name: 'glennjones'} ) );
        assert.isFalse( Modules.utils.hasProperties( {} ) );
    });
-   
-   
+
+
    it('sortObjects', function(){
        var arr = [{'name': 'one'},{'name': 'two'},{'name': 'three'},{'name': 'three'}];
-       
+
        assert.deepEqual( arr.sort( Modules.utils.sortObjects( 'name', true ) ), [{"name":"two"},{"name":"three"},{'name': 'three'},{"name":"one"}] );
        assert.deepEqual( arr.sort( Modules.utils.sortObjects( 'name', false ) ), [{"name":"one"},{"name":"three"},{'name': 'three'},{"name":"two"}] );
    });
-   
-   
-   
+
+
+
 });
--- a/toolkit/components/microformats/test/standards-tests/mf-mixed-h-card-mixedpropertries.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-mixed-h-card-mixedpropertries.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-mixed/h-card/mixedpropertries
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-card', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-mixed-h-card-tworoots.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-mixed-h-card-tworoots.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-mixed/h-card/tworoots
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-card', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-mixed-h-entry-mixedroots.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-mixed-h-entry-mixedroots.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-mixed/h-entry/mixedroots
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-entry', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-mixed-h-resume-mixedroots.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-mixed-h-resume-mixedroots.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-mixed/h-resume/mixedroots
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-resume', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-adr-simpleproperties.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-adr-simpleproperties.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/adr/simpleproperties
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('adr', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-geo-abbrpattern.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-geo-abbrpattern.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/geo/abbrpattern
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('geo', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-geo-hidden.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-geo-hidden.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/geo/hidden
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('geo', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-geo-simpleproperties.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-geo-simpleproperties.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/geo/simpleproperties
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('geo', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-geo-valuetitleclass.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-geo-valuetitleclass.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/geo/valuetitleclass
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('geo', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-ampm.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-ampm.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hcalendar/ampm
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hcalendar', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-attendees.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-attendees.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hcalendar/attendees
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hcalendar', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-combining.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-combining.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hcalendar/combining
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hcalendar', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-concatenate.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-concatenate.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hcalendar/concatenate
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hcalendar', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-time.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-time.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hcalendar/time
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hcalendar', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hcard-email.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hcard-email.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hcard/email
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hcard', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hcard-format.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hcard-format.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hcard/format
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hcard', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hcard-hyperlinkedphoto.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hcard-hyperlinkedphoto.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hcard/hyperlinkedphoto
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hcard', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hcard-justahyperlink.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hcard-justahyperlink.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hcard/justahyperlink
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hcard', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hcard-justaname.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hcard-justaname.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hcard/justaname
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hcard', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hcard-multiple.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hcard-multiple.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hcard/multiple
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hcard', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hcard-name.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hcard-name.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hcard/name
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hcard', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hcard-single.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hcard-single.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hcard/single
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hcard', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hentry-summarycontent.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hentry-summarycontent.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hentry/summarycontent
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hentry', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hfeed-simple.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hfeed-simple.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hfeed/simple
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hfeed', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hnews-all.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hnews-all.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hnews/all
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hnews', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hnews-minimum.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hnews-minimum.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hnews/minimum
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hnews', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hproduct-aggregate.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hproduct-aggregate.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hproduct/aggregate
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hproduct', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hproduct-simpleproperties.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hproduct-simpleproperties.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hproduct/simpleproperties
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hproduct', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hresume-affiliation.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hresume-affiliation.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hresume/affiliation
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hresume', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hresume-contact.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hresume-contact.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hresume/contact
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hresume', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hresume-education.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hresume-education.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hresume/education
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hresume', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hresume-skill.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hresume-skill.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hresume/skill
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hresume', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hresume-work.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hresume-work.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hresume/work
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hresume', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hreview-aggregate-hcard.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hreview-aggregate-hcard.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hreview-aggregate/hcard
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hreview-aggregate', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hreview-aggregate-justahyperlink.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hreview-aggregate-justahyperlink.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hreview-aggregate/justahyperlink
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hreview-aggregate', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hreview-aggregate-vevent.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hreview-aggregate-vevent.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hreview-aggregate/vevent
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hreview-aggregate', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hreview-item.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hreview-item.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hreview/item
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hreview', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-hreview-vcard.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-hreview-vcard.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/hreview/vcard
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('hreview', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-includes-hcarditemref.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-includes-hcarditemref.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/includes/hcarditemref
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('includes', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-includes-heventitemref.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-includes-heventitemref.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/includes/heventitemref
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('includes', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-includes-hyperlink.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-includes-hyperlink.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/includes/hyperlink
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('includes', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-includes-object.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-includes-object.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/includes/object
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('includes', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v1-includes-table.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v1-includes-table.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v1/includes/table
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('includes', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-adr-geo.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-adr-geo.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-adr/geo
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-adr', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-adr-geourl.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-adr-geourl.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-adr/geourl
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-adr', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-adr-justaname.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-adr-justaname.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-adr/justaname
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-adr', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-adr-simpleproperties.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-adr-simpleproperties.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-adr/simpleproperties
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-adr', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-as-note-note.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-as-note-note.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-as-note/note
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-as-note', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-baseurl.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-baseurl.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-card/baseurl
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-card', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-childimplied.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-childimplied.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-card/childimplied
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-card', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-extendeddescription.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-extendeddescription.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-card/extendeddescription
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-card', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-hcard.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-hcard.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-card/hcard
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-card', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-horghcard.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-horghcard.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-card/horghcard
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-card', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-hyperlinkedphoto.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-hyperlinkedphoto.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-card/hyperlinkedphoto
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-card', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-impliedname.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-impliedname.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-card/impliedname
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-card', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-impliedphoto.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-impliedphoto.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-card/impliedphoto
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-card', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-impliedurl.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-impliedurl.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-card/impliedurl
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-card', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-justahyperlink.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-justahyperlink.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-card/justahyperlink
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-card', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-justaname.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-justaname.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-card/justaname
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-card', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-nested.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-nested.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-card/nested
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-card', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-p-property.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-p-property.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-card/p-property
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-card', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-relativeurls.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-card-relativeurls.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-card/relativeurls
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-card', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-impliedvalue-nested.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-impliedvalue-nested.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-entry/impliedvalue-nested
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-entry', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-justahyperlink.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-justahyperlink.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-entry/justahyperlink
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-entry', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-justaname.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-justaname.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-entry/justaname
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-entry', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-summarycontent.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-summarycontent.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-entry/summarycontent
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-entry', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-u-property.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-u-property.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-entry/u-property
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-entry', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-urlincontent.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-urlincontent.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-entry/urlincontent
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-entry', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-ampm.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-ampm.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-event/ampm
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-event', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-attendees.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-attendees.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-event/attendees
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-event', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-combining.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-combining.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-event/combining
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-event', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-concatenate.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-concatenate.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-event/concatenate
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-event', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-dates.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-dates.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-event/dates
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-event', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-dt-property.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-dt-property.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-event/dt-property
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-event', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-justahyperlink.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-justahyperlink.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-event/justahyperlink
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-event', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-justaname.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-justaname.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-event/justaname
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-event', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-time.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-event-time.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-event/time
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-event', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-feed-implied-title.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-feed-implied-title.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-feed/implied-title
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-feed', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-feed-simple.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-feed-simple.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-feed/simple
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-feed', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-abbrpattern.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-abbrpattern.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-geo/abbrpattern
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-geo', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-altitude.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-altitude.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-geo/altitude
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-geo', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-hidden.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-hidden.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-geo/hidden
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-geo', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-justaname.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-justaname.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-geo/justaname
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-geo', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-simpleproperties.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-simpleproperties.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-geo/simpleproperties
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-geo', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-valuetitleclass.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-valuetitleclass.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-geo/valuetitleclass
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-geo', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-news-all.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-news-all.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-news/all
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-news', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-news-minimum.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-news-minimum.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-news/minimum
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-news', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-org-hyperlink.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-org-hyperlink.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-org/hyperlink
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-org', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-org-simple.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-org-simple.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-org/simple
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-org', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-org-simpleproperties.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-org-simpleproperties.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-org/simpleproperties
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-org', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-product-aggregate.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-product-aggregate.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-product/aggregate
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-product', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-product-justahyperlink.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-product-justahyperlink.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-product/justahyperlink
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-product', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-product-justaname.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-product-justaname.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-product/justaname
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-product', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-product-simpleproperties.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-product-simpleproperties.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-product/simpleproperties
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-product', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-recipe-all.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-recipe-all.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-recipe/all
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-recipe', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-recipe-minimum.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-recipe-minimum.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-recipe/minimum
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-recipe', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-affiliation.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-affiliation.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-resume/affiliation
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-resume', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-contact.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-contact.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-resume/contact
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-resume', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-education.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-education.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-resume/education
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-resume', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-justaname.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-justaname.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-resume/justaname
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-resume', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-skill.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-skill.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-resume/skill
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-resume', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-work.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-work.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-resume/work
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-resume', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-aggregate-hevent.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-aggregate-hevent.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-review-aggregate/hevent
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-review-aggregate', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-aggregate-justahyperlink.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-aggregate-justahyperlink.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-review-aggregate/justahyperlink
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-review-aggregate', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-aggregate-simpleproperties.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-aggregate-simpleproperties.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-review-aggregate/simpleproperties
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-review-aggregate', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-hyperlink.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-hyperlink.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-review/hyperlink
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-review', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-implieditem.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-implieditem.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-review/implieditem
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-review', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-item.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-item.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-review/item
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-review', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-justaname.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-justaname.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-review/justaname
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-review', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-photo.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-photo.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-review/photo
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-review', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-vcard.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-h-review-vcard.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/h-review/vcard
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('h-review', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-rel-duplicate-rels.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-rel-duplicate-rels.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/rel/duplicate-rels
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('rel', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-rel-license.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-rel-license.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/rel/license
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('rel', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-rel-nofollow.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-rel-nofollow.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/rel/nofollow
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('rel', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-rel-rel-urls.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-rel-rel-urls.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/rel/rel-urls
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('rel', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-rel-varying-text-duplicate-rels.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-rel-varying-text-duplicate-rels.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/rel/varying-text-duplicate-rels
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('rel', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-rel-xfn-all.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-rel-xfn-all.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/rel/xfn-all
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('rel', function() {
--- a/toolkit/components/microformats/test/standards-tests/mf-v2-rel-xfn-elsewhere.js
+++ b/toolkit/components/microformats/test/standards-tests/mf-v2-rel-xfn-elsewhere.js
@@ -1,10 +1,10 @@
 /*
-Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24 
+Microformats Test Suite - Downloaded from github repo: microformats/tests version v0.1.24
 Mocha integration test from: microformats-v2/rel/xfn-elsewhere
 The test was built on Fri Sep 25 2015 13:26:26 GMT+0100 (BST)
 */
 
 assert = chai.assert;
 
 
 describe('rel', function() {
--- a/toolkit/components/microformats/test/static/javascript/DOMParser.js
+++ b/toolkit/components/microformats/test/static/javascript/DOMParser.js
@@ -48,17 +48,17 @@
 
         } catch (er) {
             textHTML = false;
         }
     }
 
     // Mess with DOMParser.prototype (less than optimal...) if one of the above worked
     // Assume can write to the prototype, if not, make this a stand alone function
-    if (DOMParser.prototype && (htmlElInnerHTML || textXML)) { 
+    if (DOMParser.prototype && (htmlElInnerHTML || textXML)) {
         DOMParser_proto = DOMParser.prototype;
         real_parseFromString = DOMParser_proto.parseFromString;
 
         DOMParser_proto.parseFromString = function (markup, type) {
 
             // Only do this if type is text/html
             if (/^\s*text\/html\s*(?:;|$)/i.test(type)) {
                 var doc, doc_el, first_el;
@@ -71,17 +71,17 @@
                     first_el = doc_el.firstElementChild;
 
                 // Otherwise use XML method
                 } else if (textXML) {
 
                     // Make sure markup is wrapped in HTML tags
                     // Should probably allow for a DOCTYPE
                     if (!(/^<html.*html>$/i.test(markup))) {
-                        markup = '<html>' + markup + '<\/html>'; 
+                        markup = '<html>' + markup + '<\/html>';
                     }
                     doc = (new DOMParser).parseFromString(markup, 'text/xml');
                     doc_el = doc.documentElement;
                     first_el = doc_el.firstElementChild;
                 }
 
                 // Is this an entire document or a fragment?
                 if (doc_el.childElementCount == 1 && first_el.localName.toLowerCase() == 'html') {
--- a/toolkit/components/microformats/test/static/javascript/beautify.js
+++ b/toolkit/components/microformats/test/static/javascript/beautify.js
@@ -1,17 +1,17 @@
 /*
 
  JS Beautifier
 ---------------
 
-  Written by Einars "elfz" Lielmanis, <elfz@laacz.lv> 
+  Written by Einars "elfz" Lielmanis, <elfz@laacz.lv>
       http://elfz.laacz.lv/beautify/
 
-  Originally converted to javascript by Vital, <vital76@gmail.com> 
+  Originally converted to javascript by Vital, <vital76@gmail.com>
       http://my.opera.com/Vital/blog/2007/11/21/javascript-beautify-on-javascript-translated
 
 
   You are free to use this in any way you want, in case you find this useful or working for you.
 
   Usage:
     js_beautify(js_source_text);
 
@@ -406,17 +406,17 @@ function js_beautify(js_source_text, ind
                 return [c, 'TK_WORD'];
             }
 
             if (c == 'in') { // hack for 'in' operator
                 return [c, 'TK_OPERATOR'];
             }
             return [c, 'TK_WORD'];
         }
-        
+
         if (c == '(' || c == '[') {
             return [c, 'TK_START_EXPR'];
         }
 
         if (c == ')' || c == ']') {
             return [c, 'TK_END_EXPR'];
         }
 
--- a/toolkit/components/microformats/test/static/javascript/chai.js
+++ b/toolkit/components/microformats/test/static/javascript/chai.js
@@ -3150,17 +3150,17 @@ module.exports = function (chai, util) {
   assert.doesNotDecrease = function (fn, obj, prop) {
     new Assertion(fn).to.not.decrease(obj, prop);
   }
 
   /*!
    * ### .ifError(object)
    *
    * Asserts if value is not a false value, and throws if it is a true value.
-   * This is added to allow for chai to be a drop-in replacement for Node's 
+   * This is added to allow for chai to be a drop-in replacement for Node's
    * assert class.
    *
    *     var err = new Error('I am a custom error');
    *     assert.ifError(err); // Rethrows err!
    *
    * @name ifError
    * @param {Object} object
    * @api public
@@ -3823,17 +3823,17 @@ var getPathInfo = require('./getPathInfo
  * @param {Object} object
  * @returns {Object} value or `undefined`
  * @name getPathValue
  * @api public
  */
 module.exports = function(path, obj) {
   var info = getPathInfo(path, obj);
   return info.value;
-}; 
+};
 
 },{"./getPathInfo":16}],18:[function(require,module,exports){
 /*!
  * Chai - getProperties utility
  * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
  * MIT Licensed
  */
 
@@ -3891,17 +3891,17 @@ var type = require('type-detect');
  *       , str: 'Hello'
  *     }
  *
  * The following would be the results.
  *
  *     hasProperty('str', obj);  // true
  *     hasProperty('constructor', obj);  // true
  *     hasProperty('bar', obj);  // false
- *     
+ *
  *     hasProperty('length', obj.str); // true
  *     hasProperty(1, obj.str);  // true
  *     hasProperty(5, obj.str);  // false
  *
  *     hasProperty('length', obj.arr);  // true
  *     hasProperty(2, obj.arr);  // true
  *     hasProperty(3, obj.arr);  // false
  *
--- a/toolkit/components/microformats/test/static/javascript/count.js
+++ b/toolkit/components/microformats/test/static/javascript/count.js
@@ -1,62 +1,62 @@
 /*!
-	parse 
+	parse
 	Used by http://localhost:3000/
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
 	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 window.onload = function() {
 
     var form;
-    form= document.getElementById('mf-form'); 
-    
+    form= document.getElementById('mf-form');
+
     form.onsubmit = function(e){
         e.preventDefault();
-        
+
         var html,
             doc,
             node,
             options,
             mfJSON,
             parserJSONElt;
-    
+
         // get data from html
         html = document.getElementById('html').value;
         parserJSONElt = document.querySelector('#parser-json pre code')
-        
+
         // createHTMLDocument is not well support below ie9
     	doc = document.implementation.createHTMLDocument("New Document");
     	node =  document.createElement('div');
     	node.innerHTML = html;
-    	doc.body.appendChild(node);    
-        
+    	doc.body.appendChild(node);
+
         options ={
             'node': node
         };
 
         // parse direct into Modules to help debugging
         if(window.Modules){
             var parser = new Modules.Parser();
             mfJSON = parser.count(options);
         }else if(window.Microformats){
             mfJSON = Microformats.count(options);
         }
 
-        
+
         // format output
         parserJSONElt.innerHTML = htmlEscape( js_beautify( JSON.stringify(mfJSON) ) );
-        //prettyPrint(); 
-        
+        //prettyPrint();
+
     }
-    
+
     function htmlEscape(str) {
         return String(str)
                 .replace(/&/g, '&amp;')
                 .replace(/"/g, '&quot;')
                 .replace(/'/g, '&#39;')
                 .replace(/</g, '&lt;')
                 .replace(/>/g, '&gt;');
     }
-  
-  
-};  
+
+
+};
--- a/toolkit/components/microformats/test/static/javascript/parse.js
+++ b/toolkit/components/microformats/test/static/javascript/parse.js
@@ -1,120 +1,120 @@
 /*!
-	parse 
+	parse
 	Used by http://localhost:3000/
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
 	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 window.onload = function() {
 
     var form;
-    form= document.getElementById('mf-form'); 
-    
+    form= document.getElementById('mf-form');
+
     form.onsubmit = function(e){
         e = (e)? e : window.event;
-        
+
         if (e.preventDefault) {
-             e.preventDefault(); 
+             e.preventDefault();
         } else {
-             event.returnValue = false; 
+             event.returnValue = false;
         }
 
-        
+
         var html,
             baseUrl,
             filter,
             collapsewhitespace,
             overlappingversions,
             impliedPropertiesByVersion,
             dateformatElt,
             dateformat,
             doc,
             node,
             options,
             mfJSON,
             parserJSONElt;
-    
+
         // get data from html
         html = document.getElementById('html').value;
         baseUrl = document.getElementById('baseurl').value;
         filters = document.getElementById('filters').value;
-        collapsewhitespace = document.getElementById('collapsewhitespace').checked;  
+        collapsewhitespace = document.getElementById('collapsewhitespace').checked;
         //overlappingversions = document.getElementById('overlappingversions').checked;
-        //impliedPropertiesByVersion  = document.getElementById('impliedPropertiesByVersion').checked; 
-        parseLatLonGeo = document.getElementById('parseLatLonGeo').checked; 
+        //impliedPropertiesByVersion  = document.getElementById('impliedPropertiesByVersion').checked;
+        parseLatLonGeo = document.getElementById('parseLatLonGeo').checked;
         dateformatElt = document.getElementById("dateformat");
         dateformat = dateformatElt.options[dateformatElt.selectedIndex].value;
         parserJSONElt = document.querySelector('#parser-json pre code')
-       
-  
+
+
         var dom = new DOMParser();
         doc = dom.parseFromString( html, 'text/html' );
-        
+
         options ={
             'document': doc,
             'node': doc,
             'dateFormat': dateformat,
             'parseLatLonGeo': false
         };
-        
+
         if(baseUrl.trim() !== ''){
             options.baseUrl = baseUrl;
         }
-        
+
         if(filters.trim() !== ''){
             if(filters.indexOf(',') > -1){
                options.filters = trimArrayItems(filters.split(','));
             }else{
                 options.filters = [filters.trim()];
             }
         }
-        
+
         if(collapsewhitespace === true){
             options.textFormat = 'normalised';
         }
-        
+
         /*
         if(overlappingversions === true){
             options.overlappingVersions = false;
         }
-        
+
         if(impliedPropertiesByVersion === true){
             options.impliedPropertiesByVersion = true;
         }
         */
-        
+
         if(parseLatLonGeo === true){
             options.parseLatLonGeo = true
         }
-        
+
         if(options.baseUrl){
             html = '<base href="' + baseUrl+ '">' + html;
         }
-        
+
 
-        
+
         // parse direct into Modules to help debugging
         if(window.Modules){
             var parser = new Modules.Parser();
             mfJSON = parser.get(options);
         }else if(window.Microformats){
             mfJSON = Microformats.get(options);
         }
 
-        
+
         // format output
         parserJSONElt.innerHTML = htmlEscape( js_beautify( JSON.stringify(mfJSON) ) );
-        //prettyPrint(); 
-        
+        //prettyPrint();
+
     }
-    
-  
-};  
+
+
+};
 
 
 
 
 
 function htmlEscape(str) {
     return String(str)
             .replace(/&/g, '&amp;')
--- a/toolkit/components/microformats/test/static/javascript/prettify.js
+++ b/toolkit/components/microformats/test/static/javascript/prettify.js
@@ -62,17 +62,17 @@
  */
 window['PR_SHOULD_USE_CONTINUATION'] = true;
 
 (function () {
   // Keyword lists for various languages.
   // We use things that coerce to strings to make them compact when minified
   // and to defeat aggressive optimizers that fold large string constants.
   var FLOW_CONTROL_KEYWORDS = ["break,continue,do,else,for,if,return,while"];
-  var C_KEYWORDS = [FLOW_CONTROL_KEYWORDS,"auto,case,char,const,default," + 
+  var C_KEYWORDS = [FLOW_CONTROL_KEYWORDS,"auto,case,char,const,default," +
       "double,enum,extern,float,goto,int,long,register,short,signed,sizeof," +
       "static,struct,switch,typedef,union,unsigned,void,volatile"];
   var COMMON_KEYWORDS = [C_KEYWORDS,"catch,class,delete,false,import," +
       "new,operator,private,protected,public,this,throw,true,try,typeof"];
   var CPP_KEYWORDS = [COMMON_KEYWORDS,"alignof,align_union,asm,axiom,bool," +
       "concept,concept_map,const_cast,constexpr,decltype," +
       "dynamic_cast,explicit,export,friend,inline,late_check," +
       "mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast," +
@@ -215,40 +215,40 @@ var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?
    * matches the union of the sets of strings matched by the input RegExp.
    * Since it matches globally, if the input strings have a start-of-input
    * anchor (/^.../), it is ignored for the purposes of unioning.
    * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    * @return {RegExp} a global regex.
    */
   function combinePrefixPatterns(regexs) {
     var capturedGroupIndex = 0;
-  
+
     var needToFoldCase = false;
     var ignoreCase = false;
     for (var i = 0, n = regexs.length; i < n; ++i) {
       var regex = regexs[i];
       if (regex.ignoreCase) {
         ignoreCase = true;
       } else if (/[a-z]/i.test(regex.source.replace(
                      /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
         needToFoldCase = true;
         ignoreCase = false;
         break;
       }
     }
-  
+
     var escapeCharToCodeUnit = {
       'b': 8,
       't': 9,
       'n': 0xa,
       'v': 0xb,
       'f': 0xc,
       'r': 0xd
     };
-  
+
     function decodeEscape(charsetPart) {
       var cc0 = charsetPart.charCodeAt(0);
       if (cc0 !== 92 /* \\ */) {
         return cc0;
       }
       var c1 = charsetPart.charAt(1);
       cc0 = escapeCharToCodeUnit[c1];
       if (cc0) {
@@ -256,28 +256,28 @@ var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?
       } else if ('0' <= c1 && c1 <= '7') {
         return parseInt(charsetPart.substring(1), 8);
       } else if (c1 === 'u' || c1 === 'x') {
         return parseInt(charsetPart.substring(2), 16);
       } else {
         return charsetPart.charCodeAt(1);
       }
     }
-  
+
     function encodeEscape(charCode) {
       if (charCode < 0x20) {
         return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
       }
       var ch = String.fromCharCode(charCode);
       if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
         ch = '\\' + ch;
       }
       return ch;
     }
-  
+
     function caseFoldCharset(charSet) {
       var charsetParts = charSet.substring(1, charSet.length - 1).match(
           new RegExp(
               '\\\\u[0-9A-Fa-f]{4}'
               + '|\\\\x[0-9A-Fa-f]{2}'
               + '|\\\\[0-3][0-7]{0,2}'
               + '|\\\\[0-7]{1,2}'
               + '|\\\\[\\s\\S]'
@@ -310,46 +310,46 @@ var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?
               ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
             }
             if (!(end < 97 || start > 122)) {
               ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
             }
           }
         }
       }
-  
+
       // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
       // -> [[1, 12], [14, 14], [16, 17]]
       ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
       var consolidatedRanges = [];
       var lastRange = [NaN, NaN];
       for (i = 0; i < ranges.length; ++i) {
         var range = ranges[i];
         if (range[0] <= lastRange[1] + 1) {
           lastRange[1] = Math.max(lastRange[1], range[1]);
         } else {
           consolidatedRanges.push(lastRange = range);
         }
       }
-  
+
       var out = ['['];
       if (inverse) { out.push('^'); }
       out.push.apply(out, groups);
       for (i = 0; i < consolidatedRanges.length; ++i) {
         range = consolidatedRanges[i];
         out.push(encodeEscape(range[0]));
         if (range[1] > range[0]) {
           if (range[1] + 1 > range[0]) { out.push('-'); }
           out.push(encodeEscape(range[1]));
         }
       }
       out.push(']');
       return out.join('');
     }
-  
+
     function allowAnywhereFoldCaseAndRenumberGroups(regex) {
       // Split into character sets, escape sequences, punctuation strings
       // like ('(', '(?:', ')', '^'), and runs of characters that do not
       // include any of the above.
       var parts = regex.source.match(
           new RegExp(
               '(?:'
               + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
@@ -358,37 +358,37 @@ var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?
               + '|\\\\[0-9]+'  // a back-reference or octal escape
               + '|\\\\[^ux0-9]'  // other escape sequence
               + '|\\(\\?[:!=]'  // start of a non-capturing group
               + '|[\\(\\)\\^]'  // start/emd of a group, or line start
               + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
               + ')',
               'g'));
       var n = parts.length;
-  
+
       // Maps captured group numbers to the number they will occupy in
       // the output or to -1 if that has not been determined, or to
       // undefined if they need not be capturing in the output.
       var capturedGroups = [];
-  
+
       // Walk over and identify back references to build the capturedGroups
       // mapping.
       for (var i = 0, groupIndex = 0; i < n; ++i) {
         var p = parts[i];
         if (p === '(') {
           // groups are 1-indexed, so max group index is count of '('
           ++groupIndex;
         } else if ('\\' === p.charAt(0)) {
           var decimalValue = +p.substring(1);
           if (decimalValue && decimalValue <= groupIndex) {
             capturedGroups[decimalValue] = -1;
           }
         }
       }
-  
+
       // Renumber groups and reduce capturing groups to non-capturing groups
       // where possible.
       for (i = 1; i < capturedGroups.length; ++i) {
         if (-1 === capturedGroups[i]) {
           capturedGroups[i] = ++capturedGroupIndex;
         }
       }
       for (i = 0, groupIndex = 0; i < n; ++i) {
@@ -400,23 +400,23 @@ var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?
           }
         } else if ('\\' === p.charAt(0)) {
           decimalValue = +p.substring(1);
           if (decimalValue && decimalValue <= groupIndex) {
             parts[i] = '\\' + capturedGroups[groupIndex];
           }
         }
       }
-  
+
       // Remove any prefix anchors so that the output will match anywhere.
       // ^^ really does mean an anchored match though.
       for (i = 0, groupIndex = 0; i < n; ++i) {
         if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
       }
-  
+
       // Expand letters to groups to handle mixing of case-sensitive and
       // case-insensitive patterns if necessary.
       if (regex.ignoreCase && needToFoldCase) {
         for (i = 0; i < n; ++i) {
           p = parts[i];
           var ch0 = p.charAt(0);
           if (p.length >= 2 && ch0 === '[') {
             parts[i] = caseFoldCharset(p);
@@ -426,28 +426,28 @@ var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?
                 /[a-zA-Z]/g,
                 function (ch) {
                   var cc = ch.charCodeAt(0);
                   return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
                 });
           }
         }
       }
-  
+
       return parts.join('');
     }
-  
+
     var rewritten = [];
     for (i = 0, n = regexs.length; i < n; ++i) {
       regex = regexs[i];
       if (regex.global || regex.multiline) { throw new Error('' + regex); }
       rewritten.push(
           '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
     }
-  
+
     return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
   }
 
 
   /**
    * Split markup into a string of source code and an array mapping ranges in
    * that string to the text nodes in which they appear.
    *
@@ -487,31 +487,31 @@ var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?
    * Substrings continue until the next index or the end of the source.
    * </p>
    *
    * @param {Node} node an HTML DOM subtree containing source-code.
    * @return {Object} source code and the text nodes in which they occur.
    */
   function extractSourceSpans(node) {
     var nocode = /(?:^|\s)nocode(?:\s|$)/;
-  
+
     var chunks = [];
     var length = 0;
     var spans = [];
     var k = 0;
-  
+
     var whitespace;
     if (node.currentStyle) {
       whitespace = node.currentStyle.whiteSpace;
     } else if (window.getComputedStyle) {
       whitespace = document.defaultView.getComputedStyle(node, null)
           .getPropertyValue('white-space');
     }
     var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
-  
+
     function walk(node) {
       switch (node.nodeType) {
         case 1:  // Element
           if (nocode.test(node.className)) { return; }
           for (var child = node.firstChild; child; child = child.nextSibling) {
             walk(child);
           }
           var nodeName = node.nodeName;
@@ -533,19 +533,19 @@ var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?
             chunks[k] = text;
             spans[k << 1] = length;
             length += text.length;
             spans[(k++ << 1) | 1] = node;
           }
           break;
       }
     }
-  
+
     walk(node);
-  
+
     return {
       sourceCode: chunks.join('').replace(/\n$/, ''),
       spans: spans
     };
   }
 
 
   /**
@@ -905,38 +905,38 @@ var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?
    * @param {Node} node modified in place.  Its content is pulled into an
    *     HTMLOListElement, and each line is moved into a separate list item.
    *     This requires cloning elements, so the input might not have unique
    *     IDs after numbering.
    */
   function numberLines(node, opt_startLineNum) {
     var nocode = /(?:^|\s)nocode(?:\s|$)/;
     var lineBreak = /\r\n?|\n/;
-  
+
     var document = node.ownerDocument;
-  
+
     var whitespace;
     if (node.currentStyle) {
       whitespace = node.currentStyle.whiteSpace;
     } else if (window.getComputedStyle) {
       whitespace = document.defaultView.getComputedStyle(node, null)
           .getPropertyValue('white-space');
     }
     // If it's preformatted, then we need to split lines on line breaks
     // in addition to <BR>s.
     var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
-  
+
     var li = document.createElement('LI');
     while (node.firstChild) {
       li.appendChild(node.firstChild);
     }
     // An array of lines.  We split below, so this is initialized to one
     // un-split line.
     var listItems = [li];
-  
+
     function walk(node) {
       switch (node.nodeType) {
         case 1:  // Element
           if (nocode.test(node.className)) { break; }
           if ('BR' === node.nodeName) {
             breakAfter(node);
             // Discard the <BR> since it is now flush against a </LI>.
             if (node.parentNode) {
@@ -966,27 +966,27 @@ var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?
                 // Don't leave blank text nodes in the DOM.
                 node.parentNode.removeChild(node);
               }
             }
           }
           break;
       }
     }
-  
+
     // Split a line after the given node.
     function breakAfter(lineEndNode) {
       // If there's nothing to the right, then we can skip ending the line
       // here, and move root-wards since splitting just before an end-tag
       // would require us to create a bunch of empty copies.
       while (!lineEndNode.nextSibling) {
         lineEndNode = lineEndNode.parentNode;
         if (!lineEndNode) { return; }
       }
-  
+
       function breakLeftOf(limit, copy) {
         // Clone shallowly if this node needs to be on both sides of the break.
         var rightSide = copy ? limit.cloneNode(false) : limit;
         var parent = limit.parentNode;
         if (parent) {
           // We clone the parent chain.
           // This helps us resurrect important styling elements that cross lines.
           // E.g. in <i>Foo<br>Bar</i>
@@ -998,56 +998,56 @@ var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?
           parentClone.appendChild(rightSide);
           for (var sibling = next; sibling; sibling = next) {
             next = sibling.nextSibling;
             parentClone.appendChild(sibling);
           }
         }
         return rightSide;
       }
-  
+
       var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0);
-  
+
       // Walk the parent chain until we reach an unattached LI.
       for (var parent;
            // Check nodeType since IE invents document fragments.
            (parent = copiedListItem.parentNode) && parent.nodeType === 1;) {
         copiedListItem = parent;
       }
       // Put it on the list of lines for later processing.
       listItems.push(copiedListItem);
     }
-  
+
     // Split lines while there are lines left to split.
     for (var i = 0;  // Number of lines that have been split so far.
          i < listItems.length;  // length updated by breakAfter calls.
          ++i) {
       walk(listItems[i]);
     }
-  
+
     // Make sure numeric indices show correctly.
     if (opt_startLineNum === (opt_startLineNum|0)) {
       listItems[0].setAttribute('value', opt_startLineNum);
     }
-  
+
     var ol = document.createElement('OL');
     ol.className = 'linenums';
     var offset = Math.max(0, ((opt_startLineNum - 1 /* zero index */)) | 0) || 0;
     for (i = 0, n = listItems.length; i < n; ++i) {
       li = listItems[i];
       // Stick a class on the LIs so that stylesheets can
       // color odd/even rows, or any other row pattern that
       // is co-prime with 10.
       li.className = 'L' + ((i + offset) % 10);
       if (!li.firstChild) {
         li.appendChild(document.createTextNode('\xA0'));
       }
       ol.appendChild(li);
     }
-  
+
     node.appendChild(ol);
   }
 
   /**
    * Breaks {@code job.sourceCode} around style boundaries in
    * {@code job.decorations} and modifies {@code job.sourceNode} in place.
    * @param {Object} job like <pre>{
    *    sourceCode: {string} source as plain text,
@@ -1057,72 +1057,72 @@ var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?
    *    decorations: {Array.<number|string} an array of style classes preceded
    *       by the position at which they start in job.sourceCode in order
    * }</pre>
    * @private
    */
   function recombineTagsAndDecorations(job) {
     var isIE = /\bMSIE\b/.test(navigator.userAgent);
     var newlineRe = /\n/g;
-  
+
     var source = job.sourceCode;
     var sourceLength = source.length;
     // Index into source after the last code-unit recombined.
     var sourceIndex = 0;
-  
+
     var spans = job.spans;
     var nSpans = spans.length;
     // Index into spans after the last span which ends at or before sourceIndex.
     var spanIndex = 0;
-  
+
     var decorations = job.decorations;
     var nDecorations = decorations.length;
     // Index into decorations after the last decoration which ends at or before
     // sourceIndex.
     var decorationIndex = 0;
-  
+
     // Remove all zero-length decorations.
     decorations[nDecorations] = sourceLength;
     var decPos, i;
     for (i = decPos = 0; i < nDecorations;) {
       if (decorations[i] !== decorations[i + 2]) {
         decorations[decPos++] = decorations[i++];
         decorations[decPos++] = decorations[i++];
       } else {
         i += 2;
       }
     }
     nDecorations = decPos;
-  
+
     // Simplify decorations.
     for (i = decPos = 0; i < nDecorations;) {
       var startPos = decorations[i];
       // Conflate all adjacent decorations that use the same style.
       var startDec = decorations[i + 1];
       var end = i + 2;
       while (end + 2 <= nDecorations && decorations[end + 1] === startDec) {
         end += 2;
       }
       decorations[decPos++] = startPos;
       decorations[decPos++] = startDec;
       i = end;
     }
-  
+
     nDecorations = decorations.length = decPos;
-  
+
     var decoration = null;
     while (spanIndex < nSpans) {
       var spanStart = spans[spanIndex];
       var spanEnd = spans[spanIndex + 2] || sourceLength;
-  
+
       var decStart = decorations[decorationIndex];
       var decEnd = decorations[decorationIndex + 2] || sourceLength;
-  
+
       end = Math.min(spanEnd, decEnd);
-  
+
       var textNode = spans[spanIndex + 1];
       var styledText;
       if (textNode.nodeType !== 1  // Don't muck with <BR>s or <LI>s
           // Don't introduce spans around empty text nodes.
           && (styledText = source.substring(sourceIndex, end))) {
         // This may seem bizarre, and it is.  Emitting LF on IE causes the
         // code to display with spaces instead of line breaks.
         // Emitting Windows standard issue linebreaks (CRLF) causes a blank
@@ -1138,19 +1138,19 @@ var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?
         span.appendChild(textNode);
         if (sourceIndex < spanEnd) {  // Split off a text node.
           spans[spanIndex + 1] = textNode
               // TODO: Possibly optimize by using '' if there's no flicker.
               = document.createTextNode(source.substring(end, spanEnd));
           parentNode.insertBefore(textNode, span.nextSibling);
         }
       }
-  
+
       sourceIndex = end;
-  
+
       if (sourceIndex >= spanEnd) {
         spanIndex += 2;
       }
       if (sourceIndex >= decEnd) {
         decorationIndex += 2;
       }
     }
   }
--- a/toolkit/components/microformats/test/static/javascript/testrunner.js
+++ b/toolkit/components/microformats/test/static/javascript/testrunner.js
@@ -1,29 +1,29 @@
 /*!
-	testrunner 
+	testrunner
 	Used by http://localhost:3000/testrunner.html
 	Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
 	MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
 */
 
 var options = {
         'baseUrl': 'http://example.com',
         'dateFormat': 'html5',
         'parseLatLonGeo': false
     };
 
 window.onload = function() {
 	var test  = testData.data[0],
         versionElt = document.querySelector('#version');
-    
+
     versionElt.innerHTML = 'v' + testData.version;
-    
+
     buildTest( test );
-    buildList( testData );		
+    buildList( testData );
 }
 
 
 function displayTest(e){
      var label = e.target.innerHTML;
      var i = testData.data.length;
      while (i--) {
          if(testData.data[i].name === label){
@@ -36,91 +36,91 @@ function displayTest(e){
 
 function buildTest( test ){
 	var testDetailElt = document.querySelector('.test-detail'),
         nameElt = document.querySelector('#test-name'),
     	htmlElt = document.querySelector('#test-html pre code'),
     	jsonElt = document.querySelector('#test-json pre code'),
     	parserElt = document.querySelector('#parser-json pre code'),
     	diffElt = document.querySelector('#test-diff pre code');
-	
-	nameElt.innerHTML = test.name;	
-	htmlElt.innerHTML = htmlEscape( test.html );	
-	jsonElt.innerHTML = htmlEscape( test.json );	
-    
+
+	nameElt.innerHTML = test.name;
+	htmlElt.innerHTML = htmlEscape( test.html );
+	jsonElt.innerHTML = htmlEscape( test.json );
+
     var dom = new DOMParser();
-        doc = dom.parseFromString( test.html, 'text/html' ); 
-    
+        doc = dom.parseFromString( test.html, 'text/html' );
+
     options.node = doc;
     var mfJSON = Microformats.get( options );
 	parserElt.innerHTML = htmlEscape( js_beautify( JSON.stringify(mfJSON) ) );
-    
+
     // diff json
     var diff = DeepDiff(JSON.parse(test.json),  mfJSON);
     if(diff !== undefined){
-       diffElt.innerHTML = htmlEscape( js_beautify( JSON.stringify(diff) ) ); 
+       diffElt.innerHTML = htmlEscape( js_beautify( JSON.stringify(diff) ) );
     }else{
-       diffElt.innerHTML = ''; 
+       diffElt.innerHTML = '';
     }
-    
+
     console.log(diff)
     if(diff !== undefined){
         addClass(nameElt, 'failed');
         addClass(testDetailElt, 'test-failed');
         removeClass(testDetailElt, 'test-passed');
     }else{
         removeClass(nameElt, 'failed');
         removeClass(testDetailElt, 'test-failed');
         addClass(testDetailElt, 'test-passed');
     }
-    
+
     testDetailElt.style.display = 'block';
-    
+
     //prettyPrint();
 }
 
 
 
 function passTest( test ){
     var dom = new DOMParser(),
         doc = dom.parseFromString( test.html, 'text/html' );
-    
+
     options.node = doc;
     var mfJSON = Microformats.get( options );
-    
+
     // diff json
     var diff = DeepDiff(JSON.parse(test.json),  mfJSON);
-    return (diff === undefined);    
+    return (diff === undefined);
 }
 
 
 
 
 function buildList( tests ){
     var total = tests.data.length,
         passed = 0,
         testResultListElt = document.querySelector('.test-result-list');
-    
+
     tests.data.forEach(function(item){
         var li = document.createElement('li');
         li.innerHTML = item.name;
         testResultListElt.appendChild(li);
-        
+
         if( passTest( item ) === false ){
             //li.classList.add('failed')
             addClass(li, 'failed');
         }else{
             passed ++;
         }
-        
+
         li.addEventListener('click', function(e){
             e.preventDefault();
             displayTest(e);
         });
-        
+
     });
     updateCounts( {
         'total': total,
         'passed': passed,
         'percentPassed': ((100/total) * passed).toFixed(1)
     } )
 }
 
--- a/toolkit/components/microformats/tests/test_Microformats_geo.html
+++ b/toolkit/components/microformats/tests/test_Microformats_geo.html
@@ -102,17 +102,17 @@ function test_geo() {
 
   is(Geo.latitude, 37.77, "02-geo-abbr-latlong - latitude");
   is(Geo.longitude, -122.41, "02-geo-abbr-latlong - longitude");
 
   Geo = new geo(document.getElementById("01-geo-abbr"));
 
   is(Geo.latitude, 30.267991, "01-geo-abbr - latitude");
   is(Geo.longitude, -97.739568, "01-geo-abbr - longitude");
-  
+
   Geo = new geo(document.getElementById("02-geo-vcard-01"));
 
   is(Geo.toString(), "John Doe", "02-geo-vcard-01");
 
   Geo = new geo(document.getElementById("02-geo-vcard-02"));
 
   is(Geo.toString(), "Northern California", "02-geo-vcard-02");
 
--- a/toolkit/components/microformats/tests/test_Microformats_getters.html
+++ b/toolkit/components/microformats/tests/test_Microformats_getters.html
@@ -40,17 +40,17 @@
     mfs = Microformats.get("hCard",
                            document.getElementById("content"),
                            {recurseExternalFrames: true},
                            mfs);
     is(mfs.length, 3, "Two hCalendars and one hCard");
 
     mfs = Microformats.get("hCalendar", document.getElementById("secondnode"));
 
-    is(mfs[0].summary, "Pseudo Conference", 
+    is(mfs[0].summary, "Pseudo Conference",
        "Make sure we get the proper hCalendar from the second level node");
     is(mfs.length, 1, "And we should only get one hCalendar not two from this node.");
   }
   </script>
   </pre>
   <div id="content">
     <!-- hCard -->
     <p class="vcard" id="23-abbr-title-everything">
--- a/toolkit/components/microformats/tests/test_Microformats_hCard.html
+++ b/toolkit/components/microformats/tests/test_Microformats_hCard.html
@@ -801,17 +801,17 @@ function test_hCard() {
   is(hcard.tel[7].value, "+1.415.555.1239", "21-tel - tel");
   is(hcard.tel[8].value, "+1.415.555.1241", "21-tel - tel");
   is(hcard.tel[9].value, "+1.415.555.1242", "21-tel - tel");
 
   hcard = new hCard(document.getElementById("21-tel.2"));
 
   is(hcard.tel[0].type[0], "home", "21-tel.2 - type");
   is(hcard.tel[0].value, "+1.415.555.1212", "21-tel.2 - tel");
-  
+
   hcard = new hCard(document.getElementById("21-tel.3"));
 
   is(hcard.tel[0].type[0], "home", "21-tel.3 - type (home)");
   is(hcard.tel[0].type[1], "pref", "21-tel.3 - type (pref)");
   is(hcard.tel[0].value, "+1.415.555.1212", "21-tel.3 - tel");
 
   hcard = new hCard(document.getElementById("22-adr"));
 
@@ -879,17 +879,17 @@ function test_hCard() {
   is(hcard.adr[0]["postal-code"], "12345-6789", "23-abbr-title-everything - postal-code");
   is(hcard.adr[0]["country-name"], "United States of America", "23-abbr-title-everything - country-name");
 
   hcard = new hCard(document.getElementById("25-geo-abbr"));
 
   is(hcard.fn, "Paradise", "25-geo-abbr - fn");
   is(hcard.geo.latitude, 30.267991, "25-geo-abbr - geo.latitude");
   is(hcard.geo.longitude, -97.739568, "25-geo-abbr - geo.longitude");
-  
+
   hcard = new hCard(document.getElementById("26-ancestors"));
 
   is(hcard.fn, "John Doe", "26-ancestors - fn");
   is(hcard.n["given-name"][0], "Jonathan", "26-ancestors - given-name");
   is(hcard.n["family-name"][0], "Doe-Smith", "26-ancestors - family-name");
   is(String(hcard.n["additional-name"]), "John", "26-ancestors - additional-name");
   is(String(hcard.n["honorific-prefix"]), "Mister", "26-ancestors - honorific-prefix");
   is(String(hcard.n["honorific-suffix"]), "Medical Doctor", "26-ancestors - honorific-suffix");
@@ -940,17 +940,17 @@ function test_hCard() {
 
   hcard = new hCard(document.getElementById("30-fn-org.1"));
 
   is(hcard.fn, "W3C", "30-fn-org.1 - fn");
   is(hcard.org[0]["organization-name"], "W3C", "30-fn-org.1 - organization-name");
 
 
   hcard = new hCard(document.getElementById("30-fn-org.2"));
-  
+
   is(hcard.fn, "Dan Connolly", "30-fn-org.2  - fn");
   is(hcard.n["given-name"][0], "Dan", "30-fn-org.2  - given-name");
   is(hcard.n["family-name"][0], "Connolly", "30-fn-org.2  - family-name");
   is(hcard.org[0]["organization-name"], "W3C", "30-fn-org.2 - organization-name");
 
   hcard = new hCard(document.getElementById("30-fn-org.3"));
 
   is(hcard.fn, "W3C", "30-fn-org.3 - fn");
@@ -1025,31 +1025,31 @@ function test_hCard() {
   is(hcard.email[0].value, "joe@example.com", "33-area.1 - email");
 
   hcard = new hCard(document.getElementById("33-area.2"));
 
   is(hcard.fn, "Joe Public", "33-area.2 - fn");
   is(String(hcard.url), "http://example.com/", "33-area.2 - url");
   is(hcard.email[0].value, "joe@example.com", "33-area.2 - email");
   is(hcard.org[0]["organization-name"], "Joe Public", "33-area.2 - organization-name");
-  
+
   hcard = new hCard(document.getElementById("33-area.3"));
 
   is(hcard.fn, "Joe Public", "33-area.3 - fn");
   is(String(hcard.url), "http://example.com/", "33-area.3 - url");
   is(hcard.email[0].value, "joe@example.com", "33-area.3 - email");
   is(hcard.org[0]["organization-name"], "Joe Public", "33-area.3 - organization-name");
-  
+
   hcard = new hCard(document.getElementById("33-area.4"));
 
   is(hcard.fn, "Joe Public", "33-area.4 - fn");
   is(String(hcard.url), "http://example.com/", "33-area.4 - url");
   is(hcard.email[0].value, "joe@example.com", "33-area.4 - email");
   is(hcard.org[0]["organization-name"], "Joe Public", "33-area.4 - organization-name");
-  
+
   hcard = new hCard(document.getElementById("33-area.5"));
 
   is(hcard.fn, "Joe Public", "33-area.5 - fn");
   is(String(hcard.url), "http://example.com/", "33-area.5 - url");
   is(hcard.email[0].value, "joe@example.com", "33-area.5 - email");
   is(hcard.org[0]["organization-name"], "Joe Public", "33-area.5 - organization-name");
 
   hcard = new hCard(document.getElementById("34-notes"));
--- a/toolkit/components/nsDefaultCLH.js
+++ b/toolkit/components/nsDefaultCLH.js
@@ -69,17 +69,17 @@ nsDefaultCLH.prototype = {
       }
       catch (e) {
         out += "<Not Provided>";
       }
 
       dump(out + "\n");
       Components.utils.reportError(out);
     }
-    
+
     if (cmdLine.handleFlag("silent", false)) {
       cmdLine.preventDefault = true;
     }
 
     if (cmdLine.preventDefault)
       return;
 
     var prefs = Components.classes["@mozilla.org/preferences-service;1"]
@@ -96,17 +96,17 @@ nsDefaultCLH.prototype = {
       if (win) {
         win.focus();
     	cmdLine.preventDefault = true;
 	  return;
       }
     }
     catch (e) { }
 
-    // if the pref is missing, ignore the exception 
+    // if the pref is missing, ignore the exception
     try {
       var chromeURI = prefs.getCharPref("toolkit.defaultChromeURI");
 
       var flags = "chrome,dialog=no,all";
       try {
         flags = prefs.getCharPref("toolkit.defaultChromeFeatures");
       }
       catch (e) { }
--- a/toolkit/components/perfmonitoring/PerformanceStats.jsm
+++ b/toolkit/components/perfmonitoring/PerformanceStats.jsm
@@ -388,17 +388,17 @@ var Probes = {
  *
  * Keeping probes active when they are unused is often a bad
  * idea for performance reasons. Upon destruction, or whenever
  * a client calls `dispose`, this monitor releases the probes,
  * which may let the system deactivate them.
  */
 function PerformanceMonitor(probes) {
   this._probes = probes;
-  
+
   // Activate low-level features as needed
   for (let probe of probes) {
     probe.acquire();
   }
 
   // A finalization witness. At some point after the garbage-collection of
   // `this` object, a notification of `FINALIZATION_TOPIC` will be triggered
   // with `id` as message.
@@ -424,17 +424,17 @@ PerformanceMonitor.prototype = {
    *
    * Clients should NOT expect that the first call to `promiseSnapshot()`
    * will return a `Snapshot` in which all values are 0. For most uses,
    * the appropriate scenario is to perform a first call to `promiseSnapshot()`
    * to obtain a baseline, and then watch evolution of the values by calling
    * `promiseSnapshot()` and `subtract()`.
    *
    * On the other hand, numeric values are also monotonic across several instances
-   * of a PerformanceMonitor with the same probes. 
+   * of a PerformanceMonitor with the same probes.
    *  let a = PerformanceStats.getMonitor(someProbes);
    *  let snapshot1 = yield a.promiseSnapshot();
    *
    *  // ...
    *  let b = PerformanceStats.getMonitor(someProbes); // Same list of probes
    *  let snapshot2 = yield b.promiseSnapshot();
    *
    *  // all values of `snapshot2` are greater or equal to values of `snapshot1`.
--- a/toolkit/components/perfmonitoring/tests/browser/browser_compartments.js
+++ b/toolkit/components/perfmonitoring/tests/browser/browser_compartments.js
@@ -55,17 +55,17 @@ function frameScript() {
         sendAsyncMessage("compartments-test:setTitles");
       } catch (ex) {
         Cu.reportError("Error in content (setTitles): " + ex);
         Cu.reportError(ex.stack);
       }
     });
   } catch (ex) {
     Cu.reportError("Error in content (setup): " + ex);
-    Cu.reportError(ex.stack);    
+    Cu.reportError(ex.stack);
   }
 }
 
 // A variant of `Assert` that doesn't spam the logs
 // in case of success.
 var SilentAssert = {
   equal: function(a, b, msg) {
     if (a == b) {
--- a/toolkit/components/perfmonitoring/tests/browser/browser_webpagePerformanceAlerts.js
+++ b/toolkit/components/perfmonitoring/tests/browser/browser_webpagePerformanceAlerts.js
@@ -49,17 +49,17 @@ add_task(function* test_open_window_then
     return details;
   }); // This listener should be triggered.
 
   info(`Creating fake burner`);
   let otherTab = gBrowser.addTab();
   yield BrowserTestUtils.browserLoaded(otherTab.linkedBrowser);
   info(`Check that burning CPU triggers the real listener, but not the fake listener`);
   let fakeListener = new WebpageListener(otherTab.linkedBrowser.outerWindowID, group => group.windowId == burner.windowId); // This listener should never be triggered.
-  let universalListener = new WebpageListener(0, alerts => 
+  let universalListener = new WebpageListener(0, alerts =>
     alerts.find(alert => alert.source.windowId == burner.windowId)
   );
 
   // Waiting a little – listeners are buffered.
   yield new Promise(resolve => setTimeout(resolve, 100));
 
   yield burner.run("promiseBurnContentCPU", 20, realListener);
   Assert.ok(realListener.triggered, `1. The real listener was triggered`);
--- a/toolkit/components/places/BookmarkHTMLUtils.jsm
+++ b/toolkit/components/places/BookmarkHTMLUtils.jsm
@@ -284,17 +284,17 @@ function Frame(aFrameId) {
    * necessary.
    */
   this.inDescription = false;
 
   /**
    * contains the URL of the previous bookmark created. This is used so that
    * when we encounter a <dd>, we know what bookmark to associate the text with.
    * This is cleared whenever we hit a <h3>, so that we know NOT to save this
-   * with a bookmark, but to keep it until 
+   * with a bookmark, but to keep it until
    */
   this.previousLink = null; // nsIURI
 
   /**
    * contains the URL of the previous livemark, so that when the link ends,
    * and the livemark title is known, we can create it.
    */
   this.previousFeed = null; // nsIURI
@@ -341,17 +341,17 @@ BookmarkImporter.prototype = {
     let frame = this._curFrame;
     let containerTitle = frame.previousText;
     frame.previousText = "";
     let containerType = frame.lastContainerType;
 
     switch (containerType) {
       case Container_Normal:
         // append a new folder
-        containerId = 
+        containerId =
           PlacesUtils.bookmarks.createFolder(frame.containerId,
                                              containerTitle,
                                              PlacesUtils.bookmarks.DEFAULT_INDEX);
         break;
       case Container_Places:
         containerId = PlacesUtils.placesRootId;
         break;
       case Container_Menu:
@@ -760,24 +760,24 @@ BookmarkImporter.prototype = {
                                                       0,
                                                       PlacesUtils.annotations.EXPIRE_NEVER);
           }
         } catch(e) {
         }
         frame.previousText = "";
 
         // Set last-modified a 2nd time for all items with descriptions
-        // we need to set last-modified as the *last* step in processing 
+        // we need to set last-modified as the *last* step in processing
         // any item type in the bookmarks.html file, so that we do
-        // not overwrite the imported value. for items without descriptions, 
-        // setting this value after setting the item title is that 
+        // not overwrite the imported value. for items without descriptions,
+        // setting this value after setting the item title is that
         // last point at which we can save this value before it gets reset.
         // for items with descriptions, it must set after that point.
-        // however, at the point at which we set the title, there's no way 
-        // to determine if there will be a description following, 
+        // however, at the point at which we set the title, there's no way
+        // to determine if there will be a description following,
         // so we need to set the last-modified-date at both places.
 
         let lastModified;
         if (!frame.previousLink) {
           lastModified = this._previousFrame.previousLastModifiedDate;
         } else {
           lastModified = frame.previousLastModifiedDate;
         }
--- a/toolkit/components/places/Bookmarks.jsm
+++ b/toolkit/components/places/Bookmarks.jsm
@@ -688,17 +688,17 @@ function updateBookmark(info, item, newP
       tuples.set("lastModified", { value: toPRTime(info.lastModified) });
     if (info.hasOwnProperty("title"))
       tuples.set("title", { value: info.title });
 
     yield db.executeTransaction(function* () {
       if (info.hasOwnProperty("url")) {
         // Ensure a page exists in moz_places for this URL.
         yield db.executeCached(
-          `INSERT OR IGNORE INTO moz_places (url, rev_host, hidden, frecency, guid) 
+          `INSERT OR IGNORE INTO moz_places (url, rev_host, hidden, frecency, guid)
            VALUES (:url, :rev_host, 0, :frecency, GENERATE_GUID())
           `, { url: info.url ? info.url.href : null,
                rev_host: PlacesUtils.getReversedHost(info.url),
                frecency: info.url.protocol == "place:" ? 0 : -1 });
         tuples.set("url", { value: info.url.href
                           , fragment: "fk = (SELECT id FROM moz_places WHERE url = :url)" });
       }
 
@@ -776,17 +776,17 @@ function insertBookmark(item, parent) {
     // bookmark just after having created it.
     if (!item.hasOwnProperty("guid"))
       item.guid = (yield db.executeCached("SELECT GENERATE_GUID() AS guid"))[0].getResultByName("guid");
 
     yield db.executeTransaction(function* transaction() {
       if (item.type == Bookmarks.TYPE_BOOKMARK) {
         // Ensure a page exists in moz_places for this URL.
         yield db.executeCached(
-          `INSERT OR IGNORE INTO moz_places (url, rev_host, hidden, frecency, guid) 
+          `INSERT OR IGNORE INTO moz_places (url, rev_host, hidden, frecency, guid)
            VALUES (:url, :rev_host, 0, :frecency, GENERATE_GUID())
           `, { url: item.url.href, rev_host: PlacesUtils.getReversedHost(item.url),
                frecency: item.url.protocol == "place:" ? 0 : -1 });
       }
 
       // Adjust indices.
       yield db.executeCached(
         `UPDATE moz_bookmarks SET position = position + 1
--- a/toolkit/components/places/PlacesBackups.jsm
+++ b/toolkit/components/places/PlacesBackups.jsm
@@ -510,17 +510,17 @@ this.PlacesBackups = {
    *         Each bookmark is represented by an object having these properties:
    *         * id: the item id (make this not enumerable after bug 824502)
    *         * title: the title
    *         * guid: unique id
    *         * parent: item id of the parent folder, not enumerable
    *         * index: the position in the parent
    *         * dateAdded: microseconds from the epoch
    *         * lastModified: microseconds from the epoch
-   *         * type: type of the originating node as defined in PlacesUtils 
+   *         * type: type of the originating node as defined in PlacesUtils
    *         The following properties exist only for a subset of bookmarks:
    *         * annos: array of annotations
    *         * uri: url
    *         * iconuri: favicon's url
    *         * keyword: associated keyword
    *         * charset: last known charset
    *         * tags: csv string of tags
    *         * root: string describing whether this represents a root
--- a/toolkit/components/places/PlacesUtils.jsm
+++ b/toolkit/components/places/PlacesUtils.jsm
@@ -1451,17 +1451,17 @@ this.PlacesUtils = {
       let conn = yield this.promiseDBConnection();
       const QUERY_STR = `SELECT b.id FROM moz_bookmarks b
                          JOIN moz_places h on h.id = b.fk
                          WHERE h.url = :url`;
       let spec = aURI instanceof Ci.nsIURI ? aURI.spec : aURI;
       yield conn.executeCached(QUERY_STR, { url: spec }, aRow => {
         if (abort)
           throw StopIteration;
-        itemIds.push(aRow.getResultByIndex(0));  
+        itemIds.push(aRow.getResultByIndex(0));
       });
       if (!abort)
         aCallback(itemIds, aURI);
     }.bind(this)).then(null, Cu.reportError);
     return { cancel: () => { abort = true; } };
   },
 
   /**
@@ -2618,18 +2618,18 @@ BaseTransaction.prototype = {
   },
   QueryInterface: XPCOMUtils.generateQI([
     Ci.nsITransaction
   ]),
 };
 
 
 /**
- * Transaction for performing several Places Transactions in a single batch. 
- * 
+ * Transaction for performing several Places Transactions in a single batch.
+ *
  * @param aName
  *        title of the aggregate transactions
  * @param aTransactions
  *        an array of transactions to perform
  *
  * @return nsITransaction object
  */
 this.PlacesAggregatedTransaction =
@@ -2727,17 +2727,17 @@ this.PlacesCreateFolderTransaction =
   this.item.annotations = aAnnotations;
   this.childTransactions = aChildTransactions;
 }
 
 PlacesCreateFolderTransaction.prototype = {
   __proto__: BaseTransaction.prototype,
 
   doTransaction: function CFTXN_doTransaction()
-  { 
+  {
     this.item.id = PlacesUtils.bookmarks.createFolder(this.item.parentId,
                                                       this.item.title,
                                                       this.item.index);
     if (this.item.annotations && this.item.annotations.length > 0)
       PlacesUtils.setAnnotationsForItem(this.item.id, this.item.annotations);
 
     if (this.childTransactions && this.childTransactions.length > 0) {
       // Set the new parent id into child transactions.
@@ -2822,17 +2822,17 @@ PlacesCreateBookmarkTransaction.prototyp
                                                   this.item.keyword);
       if (this.item.postData) {
         PlacesUtils.setPostDataForBookmark(this.item.id,
                                            this.item.postData);
       }
     }
     if (this.item.annotations && this.item.annotations.length > 0)
       PlacesUtils.setAnnotationsForItem(this.item.id, this.item.annotations);
- 
+
     if (this.childTransactions && this.childTransactions.length > 0) {
       // Set the new item id into child transactions.
       for (let i = 0; i < this.childTransactions.length; ++i) {
         this.childTransactions[i].item.id = this.item.id;
       }
       let txn = new PlacesAggregatedTransaction("Create item childTxn",
                                                 this.childTransactions);
       txn.doTransaction();
@@ -3275,17 +3275,17 @@ PlacesEditBookmarkURITransaction.prototy
         PlacesUtils.tagging.untagURI(this.item.uri, this.item.tags);
       PlacesUtils.tagging.tagURI(this.new.uri, this.item.tags);
     }
   },
 
   undoTransaction: function EBUTXN_undoTransaction()
   {
     PlacesUtils.bookmarks.changeBookmarkURI(this.item.id, this.item.uri);
-    // move tags from new URI to old URI 
+    // move tags from new URI to old URI
     if (this.item.tags.length > 0) {
       // only untag the new URI if this is the only bookmark
       if (PlacesUtils.getBookmarksForURI(this.new.uri, {}).length == 0)
         PlacesUtils.tagging.untagURI(this.new.uri, this.item.tags);
       PlacesUtils.tagging.tagURI(this.item.uri, this.item.tags);
     }
   }
 };
@@ -3494,17 +3494,17 @@ PlacesEditBookmarkPostDataTransaction.pr
 
 
 /**
  * Transaction for editing an item's date added property.
  *
  * @param aItemId
  *        id of the item to edit
  * @param aNewDateAdded
- *        new date added for the item 
+ *        new date added for the item
  *
  * @return nsITransaction object
  */
 this.PlacesEditItemDateAddedTransaction =
  function PlacesEditItemDateAddedTransaction(aItemId, aNewDateAdded)
 {
   this.item = new TransactionItemCache();
   this.item.id = aItemId;
@@ -3533,17 +3533,17 @@ PlacesEditItemDateAddedTransaction.proto
 
 
 /**
  * Transaction for editing an item's last modified time.
  *
  * @param aItemId
  *        id of the item to edit
  * @param aNewLastModified
- *        new last modified date for the item 
+ *        new last modified date for the item
  *
  * @return nsITransaction object
  */
 this.PlacesEditItemLastModifiedTransaction =
  function PlacesEditItemLastModifiedTransaction(aItemId, aNewLastModified)
 {
   this.item = new TransactionItemCache();
   this.item.id = aItemId;
@@ -3581,33 +3581,33 @@ PlacesEditItemLastModifiedTransaction.pr
  * @param aFolderId
  *        id of the folder to sort
  *
  * @return nsITransaction object
  */
 this.PlacesSortFolderByNameTransaction =
  function PlacesSortFolderByNameTransaction(aFolderId)
 {
-  this.item = new TransactionItemCache();  
+  this.item = new TransactionItemCache();
   this.item.id = aFolderId;
 }
 
 PlacesSortFolderByNameTransaction.prototype = {
   __proto__: BaseTransaction.prototype,
 
   doTransaction: function SFBNTXN_doTransaction()
   {
     this._oldOrder = [];
 
     let contents =
       PlacesUtils.getFolderContents(this.item.id, false, false).root;
     let count = contents.childCount;
 
     // sort between separators
-    let newOrder = []; 
+    let newOrder = [];
     let preSep = []; // temporary array for sorting each group of items
     let sortingMethod =
       function (a, b) {
         if (PlacesUtils.nodeIsContainer(a) && !PlacesUtils.nodeIsContainer(b))
           return -1;
         if (!PlacesUtils.nodeIsContainer(a) && PlacesUtils.nodeIsContainer(b))
           return 1;
         return a.title.localeCompare(b.title);
--- a/toolkit/components/places/nsTaggingService.js
+++ b/toolkit/components/places/nsTaggingService.js
@@ -303,17 +303,17 @@ TaggingService.prototype = {
     tags.sort(function(a, b) {
         return a.toLowerCase().localeCompare(b.toLowerCase());
       });
     if (aCount)
       aCount.value = tags.length;
     return tags;
   },
 
-  __tagFolders: null, 
+  __tagFolders: null,
   get _tagFolders() {
     if (!this.__tagFolders) {
       this.__tagFolders = [];
 
       let db = PlacesUtils.history.QueryInterface(Ci.nsPIPlacesDatabase)
                                   .DBConnection;
       let stmt = db.createStatement(
         "SELECT id, title FROM moz_bookmarks WHERE parent = :tags_root "
@@ -477,17 +477,17 @@ function TagAutoCompleteResult(searchStr
   this._searchResult = searchResult;
   this._defaultIndex = defaultIndex;
   this._errorDescription = errorDescription;
   this._results = results;
   this._comments = comments;
 }
 
 TagAutoCompleteResult.prototype = {
-  
+
   /**
    * The original search string
    */
   get searchString() {
     return this._searchString;
   },
 
   /**
@@ -590,17 +590,17 @@ TagAutoCompleteResult.prototype = {
 // Implements nsIAutoCompleteSearch
 function TagAutoCompleteSearch() {
   XPCOMUtils.defineLazyServiceGetter(this, "tagging",
                                      "@mozilla.org/browser/tagging-service;1",
                                      "nsITaggingService");
 }
 
 TagAutoCompleteSearch.prototype = {
-  _stopped : false, 
+  _stopped : false,
 
   /*
    * Search for a given string and notify a listener (either synchronously
    * or asynchronously) of the result
    *
    * @param searchString - The string to search for
    * @param searchParam - An extra parameter
    * @param previousResult - A previous result to use for faster searching
@@ -608,52 +608,52 @@ TagAutoCompleteSearch.prototype = {
    */
   startSearch: function PTACS_startSearch(searchString, searchParam, result, listener) {
     var searchResults = this.tagging.allTags;
     var results = [];
     var comments = [];
     this._stopped = false;
 
     // only search on characters for the last tag
-    var index = Math.max(searchString.lastIndexOf(","), 
+    var index = Math.max(searchString.lastIndexOf(","),
       searchString.lastIndexOf(";"));
-    var before = ''; 
-    if (index != -1) {  
+    var before = '';
+    if (index != -1) {
       before = searchString.slice(0, index+1);
       searchString = searchString.slice(index+1);
       // skip past whitespace
       var m = searchString.match(/\s+/);
       if (m) {
          before += m[0];
          searchString = searchString.slice(m[0].length);
       }
     }
 
     if (!searchString.length) {
       var newResult = new TagAutoCompleteResult(searchString,
         Ci.nsIAutoCompleteResult.RESULT_NOMATCH, 0, "", results, comments);
       listener.onSearchResult(self, newResult);
       return;
     }
-    
+
     var self = this;
     // generator: if yields true, not done
     function* doSearch() {
       var i = 0;
       while (i < searchResults.length) {
         if (self._stopped)
           yield false;
         // for each match, prepend what the user has typed so far
         if (searchResults[i].toLowerCase()
                             .indexOf(searchString.toLowerCase()) == 0 &&
             !comments.includes(searchResults[i])) {
           results.push(before + searchResults[i]);
           comments.push(searchResults[i]);
         }
-    
+
         ++i;
 
         /* TODO: bug 481451
          * For each yield we pass a new result to the autocomplete
          * listener. The listener appends instead of replacing previous results,
          * causing invalid matchCount values.
          *
          * As a workaround, all tags are searched through in a single batch,
@@ -674,17 +674,17 @@ TagAutoCompleteSearch.prototype = {
       let searchResult = results.length > 0 ?
                            Ci.nsIAutoCompleteResult.RESULT_SUCCESS :
                            Ci.nsIAutoCompleteResult.RESULT_NOMATCH;
       var newResult = new TagAutoCompleteResult(searchString, searchResult, 0,
                                                 "", results, comments);
       listener.onSearchResult(self, newResult);
       yield false;
     }
-    
+
     // chunk the search results via the generator
     var gen = doSearch();
     while (gen.next().value);
   },
 
   /**
    * Stop an asynchronous search that is in progress
    */
--- a/toolkit/components/places/tests/autocomplete/test_match_beginning.js
+++ b/toolkit/components/places/tests/autocomplete/test_match_beginning.js
@@ -28,17 +28,17 @@ var gTests = [
    "a", [0],
    () => setBehavior(3)],
   ["1: Match at the beginning of titles",
    "b", [1]],
   ["2: Match at the beginning of urls",
    "x", [0]],
   ["3: Match at the beginning of urls",
    "y", [1]],
-  
+
   // Tests after this one will match against word boundaries and anywhere
   ["4: Sanity check that matching anywhere finds more",
    "a", [0,1],
    () => setBehavior(1)],
 ];
 
 function setBehavior(aType) {
   prefs.setIntPref("browser.urlbar.matchBehavior", aType);
--- a/toolkit/components/places/tests/bookmarks/test_384228.js
+++ b/toolkit/components/places/tests/bookmarks/test_384228.js
@@ -11,17 +11,17 @@ try {
   do_throw("Could not get nav-bookmarks-service\n");
 }
 
 // Get history service
 try {
   var histsvc = Cc["@mozilla.org/browser/nav-history-service;1"].getService(Ci.nsINavHistoryService);
 } catch(ex) {
   do_throw("Could not get history service\n");
-} 
+}
 
 // get bookmarks root id
 var root = bmsvc.bookmarksMenuFolder;
 
 // main
 function run_test() {
   // test querying for bookmarks in multiple folders
   var testFolder1 = bmsvc.createFolder(root, "bug 384228 test folder 1",
--- a/toolkit/components/places/tests/bookmarks/test_385829.js
+++ b/toolkit/components/places/tests/bookmarks/test_385829.js
@@ -11,17 +11,17 @@ try {
   do_throw("Could not get nav-bookmarks-service\n");
 }
 
 // Get history service
 try {
   var histsvc = Cc["@mozilla.org/browser/nav-history-service;1"].getService(Ci.nsINavHistoryService);
 } catch(ex) {
   do_throw("Could not get history service\n");
-} 
+}
 
 // get bookmarks root id
 var root = bmsvc.bookmarksMenuFolder;
 
 // main
 function run_test() {
   // test search on folder with various sorts and max results
   // see bug #385829 for more details
--- a/toolkit/components/places/tests/bookmarks/test_388695.js
+++ b/toolkit/components/places/tests/bookmarks/test_388695.js
@@ -30,17 +30,17 @@ function run_test() {
   // see PR_Now() documentation
   do_test_pending();
 
   gItemId1 = bmsvc.insertBookmark(gTestRoot, gURI, bmsvc.DEFAULT_INDEX, "");
   do_timeout(100, phase2);
 }
 
 function phase2() {
-  gItemId2 = bmsvc.insertBookmark(gTestRoot, gURI, bmsvc.DEFAULT_INDEX, "");  
+  gItemId2 = bmsvc.insertBookmark(gTestRoot, gURI, bmsvc.DEFAULT_INDEX, "");
   var b = bmsvc.getBookmarkIdsForURI(gURI);
   do_check_eq(b[0], gItemId2);
   do_check_eq(b[1], gItemId1);
   do_timeout(100, phase3);
 }
 
 function phase3() {
   // trigger last modified change
--- a/toolkit/components/places/tests/bookmarks/test_395101.js
+++ b/toolkit/components/places/tests/bookmarks/test_395101.js
@@ -11,17 +11,17 @@ try {
   do_throw("Could not get nav-bookmarks-service\n");
 }
 
 // Get history service
 try {
   var histsvc = Cc["@mozilla.org/browser/nav-history-service;1"].getService(Ci.nsINavHistoryService);
 } catch(ex) {
   do_throw("Could not get history service\n");
-} 
+}
 
 // Get tagging service
 try {
   var tagssvc = Cc["@mozilla.org/browser/tagging-service;1"].
                 getService(Ci.nsITaggingService);
 } catch(ex) {
   do_throw("Could not get tagging service\n");
 }
--- a/toolkit/components/places/tests/bookmarks/test_405938_restore_queries.js
+++ b/toolkit/components/places/tests/bookmarks/test_405938_restore_queries.js
@@ -48,20 +48,20 @@ var test = {
     // folder to hold this test
     PlacesUtils.bookmarks.removeFolderChildren(PlacesUtils.toolbarFolderId);
     this._testRootId =
       PlacesUtils.bookmarks.createFolder(PlacesUtils.toolbarFolderId,
                                          this._testRootTitle, DEFAULT_INDEX);
 
     // create test folders each with a bookmark
     for (var i = 0; i < this._count; i++) {
-      var folderId = 
+      var folderId =
         PlacesUtils.bookmarks.createFolder(this._testRootId, "folder" + i, DEFAULT_INDEX);
       this._folderIds.push(folderId)
-      
+
       var bookmarkURI = uri("http://" + i);
       PlacesUtils.bookmarks.insertBookmark(folderId, bookmarkURI,
                                            DEFAULT_INDEX, "bookmark" + i);
       this._bookmarkURIs.push(bookmarkURI);
     }
 
     // create a query URI with 1 folder (ie: folder shortcut)
     this._queryURI1 = uri("place:folder=" + this._folderIds[0] + "&queryType=1");
--- a/toolkit/components/places/tests/bookmarks/test_417228-exclude-from-backup.js
+++ b/toolkit/components/places/tests/bookmarks/test_417228-exclude-from-backup.js
@@ -47,17 +47,17 @@ var test = {
                               .insertBookmark(restoreRootId,
                                               this._restoreRootExcludeURI,
                                               idx, "exclude uri");
     // Annotate the bookmark for exclusion.
     PlacesUtils.annotations.setItemAnnotation(exItemId,
                                               EXCLUDE_FROM_BACKUP_ANNO, 1, 0,
                                               PlacesUtils.annotations.EXPIRE_NEVER);
 
-    // create a root to be exclude 
+    // create a root to be exclude
     this._excludeRootTitle = "exclude root";
     this._excludeRootId = PlacesUtils.bookmarks
                                      .createFolder(PlacesUtils.placesRootId,
                                                    this._excludeRootTitle, idx);
     // Annotate the root for exclusion.
     PlacesUtils.annotations.setItemAnnotation(this._excludeRootId,
                                               EXCLUDE_FROM_BACKUP_ANNO, 1, 0,
                                               PlacesUtils.annotations.EXPIRE_NEVER);
--- a/toolkit/components/places/tests/bookmarks/test_424958-json-quoted-folders.js
+++ b/toolkit/components/places/tests/bookmarks/test_424958-json-quoted-folders.js
@@ -19,17 +19,17 @@ this.push(myTest);
 
 */
 
 var quotesTest = {
   _folderTitle: '"quoted folder"',
   _folderId: null,
 
   populate: function () {
-    this._folderId = 
+    this._folderId =
       PlacesUtils.bookmarks.createFolder(PlacesUtils.toolbarFolderId,
                                          this._folderTitle,
                                          PlacesUtils.bookmarks.DEFAULT_INDEX);
   },
 
   clean: function () {
     PlacesUtils.bookmarks.removeItem(this._folderId);
   },
--- a/toolkit/components/places/tests/bookmarks/test_448584.js
+++ b/toolkit/components/places/tests/bookmarks/test_448584.js
@@ -27,17 +27,17 @@ var invalidURITest = {
 
   populate: function () {
     // add a valid bookmark
     PlacesUtils.bookmarks.insertBookmark(PlacesUtils.toolbarFolderId,
                                          PlacesUtils._uri(this._itemUrl),
                                          PlacesUtils.bookmarks.DEFAULT_INDEX,
                                          this._itemTitle);
     // this bookmark will go corrupt
-    this._itemId = 
+    this._itemId =
       PlacesUtils.bookmarks.insertBookmark(PlacesUtils.toolbarFolderId,
                                            PlacesUtils._uri(this._itemUrl),
                                            PlacesUtils.bookmarks.DEFAULT_INDEX,
                                            this._itemTitle);
   },
 
   clean: function () {
     PlacesUtils.bookmarks.removeItem(this._itemId);
--- a/toolkit/components/places/tests/bookmarks/test_818584-discard-duplicate-backups.js
+++ b/toolkit/components/places/tests/bookmarks/test_818584-discard-duplicate-backups.js
@@ -26,17 +26,17 @@ add_task(function*() {
   // Create a backup.
   // This should just rename the existing backup, so in the end there should be
   // only one backup with today's date.
   yield PlacesBackups.create();
 
   // Get the hash of the generated backup
   let backupFiles = yield PlacesBackups.getBackupFiles();
   do_check_eq(backupFiles.length, 1);
-  
+
   let matches = OS.Path.basename(backupFiles[0]).match(PlacesBackups.filenamesRegex);
   do_check_eq(matches[1], PlacesBackups.toISODateString(new Date()));
   do_check_eq(matches[2], count);
   do_check_eq(matches[3], hash);
 
   // Add a bookmark and create another backup.
   let bookmarkId = PlacesUtils.bookmarks.insertBookmark(PlacesUtils.bookmarks.bookmarksMenuFolder,
                                                         uri("http://foo.com"),
--- a/toolkit/components/places/tests/bookmarks/test_997030-bookmarks-html-encode.js
+++ b/toolkit/components/places/tests/bookmarks/test_997030-bookmarks-html-encode.js
@@ -1,16 +1,16 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /**
  * Checks that we don't encodeURI twice when creating bookmarks.html.
  */
- 
+
 function run_test() {
   run_next_test();
 }
 
 add_task(function* () {
   let uri = NetUtil.newURI("http://bt.ktxp.com/search.php?keyword=%E5%A6%84%E6%83%B3%E5%AD%A6%E7%94%9F%E4%BC%9A");
   let bm = PlacesUtils.bookmarks.insertBookmark(PlacesUtils.unfiledBookmarksFolderId,
                                                 uri,
--- a/toolkit/components/places/tests/bookmarks/test_bmindex.js
+++ b/toolkit/components/places/tests/bookmarks/test_bmindex.js
@@ -102,17 +102,17 @@ function run_test() {
       bs.moveItem(id, bs.unfiledBookmarksFolder, newIndex);
       if (newIndex < -1)
         do_throw("Moving an item to a negative index should throw\n");
     }
     catch (ex) {
       if (newIndex >= -1)
         do_throw("Moving an item to a valid index should not throw\n");
     }
-    
+
   }
   check_contiguous_indexes(bookmarks);
 
   // Ensure setItemIndex throws if we pass it a negative index.
   try {
     bs.setItemIndex(bookmarks[0], -1);
     do_throw("setItemIndex should throw for a negative index");
   } catch (ex) {}
--- a/toolkit/components/places/tests/bookmarks/test_bookmarks_fetch.js
+++ b/toolkit/components/places/tests/bookmarks/test_bookmarks_fetch.js
@@ -172,17 +172,17 @@ add_task(function* fetch_separator() {
   Assert.deepEqual(bm1, bm2);
   Assert.equal(bm2.parentGuid, PlacesUtils.bookmarks.unfiledGuid);
   Assert.equal(bm2.index, 0);
   Assert.deepEqual(bm2.dateAdded, bm2.lastModified);
   Assert.equal(bm2.type, PlacesUtils.bookmarks.TYPE_SEPARATOR);
   Assert.ok(!("url" in bm2));
   Assert.ok(!("title" in bm2));
 
-  yield PlacesUtils.bookmarks.remove(bm1.guid);  
+  yield PlacesUtils.bookmarks.remove(bm1.guid);
 });
 
 add_task(function* fetch_byposition_nonexisting_parentGuid() {
   let bm = yield PlacesUtils.bookmarks.fetch({ parentGuid: "123456789012",
                                                index: 0 },
                                              gAccumulator.callback);
   Assert.equal(bm, null);
   Assert.equal(gAccumulator.results.length, 0);
--- a/toolkit/components/places/tests/browser/browser_bug680727.js
+++ b/toolkit/components/places/tests/browser/browser_bug680727.js
@@ -3,17 +3,17 @@
 
 /* Ensure that clicking the button in the Offline mode neterror page updates
    global history. See bug 680727. */
 /* TEST_PATH=toolkit/components/places/tests/browser/browser_bug680727.js make -C $(OBJDIR) mochitest-browser-chrome */
 
 
 const kUniqueURI = Services.io.newURI("http://mochi.test:8888/#bug_680727",
                                       null, null);
-var gAsyncHistory = 
+var gAsyncHistory =
   Cc["@mozilla.org/browser/history;1"].getService(Ci.mozIAsyncHistory);
 
 var proxyPrefValue;
 
 function test() {
   waitForExplicitFinish();
 
   gBrowser.selectedTab = gBrowser.addTab();
@@ -82,17 +82,17 @@ function reloadListener() {
   window.removeEventListener("DOMContentLoaded", reloadListener, false);
 
   // This listener catches "DOMContentLoaded" on being called
   // nsIWPL::onLocationChange(...). That is right *AFTER*
   // IHistory::VisitURI(...) is called.
   ok(!Services.io.offline, "Services.io.offline is false.");
 
   // This is not an error page.
-  is(gBrowser.contentDocument.documentURI, kUniqueURI.spec, 
+  is(gBrowser.contentDocument.documentURI, kUniqueURI.spec,
      "Document URI is not the offline-error page, but the original URI.");
 
   // Check if global history remembers the successfully-requested URI.
   PlacesTestUtils.promiseAsyncUpdates().then(() => {
     gAsyncHistory.isURIVisited(kUniqueURI, reloadAsyncListener);
   });
 }
 
--- a/toolkit/components/places/tests/history/test_remove.js
+++ b/toolkit/components/places/tests/history/test_remove.js
@@ -269,17 +269,17 @@ add_task(function* test_remove_many() {
   }
 
   Assert.notEqual(visits_in_database(WITNESS_URI), 0, "Witness URI still has visits");
   Assert.notEqual(page_in_database(WITNESS_URI), 0, "Witness URI is still here");
 });
 
 add_task(function* cleanup() {
   yield PlacesTestUtils.clearHistory();
-  yield PlacesUtils.bookmarks.eraseEverything();  
+  yield PlacesUtils.bookmarks.eraseEverything();
 });
 
 // Test the various error cases
 add_task(function* test_error_cases() {
   Assert.throws(
     () =>  PlacesUtils.history.remove(),
     /TypeError: Invalid url/,
     "History.remove with no argument should throw a TypeError"
--- a/toolkit/components/places/tests/queries/test_415716.js
+++ b/toolkit/components/places/tests/queries/test_415716.js
@@ -70,17 +70,17 @@ add_task(function* test_buildTestDatabas
 
 /**
  * This test will test Queries that use relative Time Range, minVists, maxVisits,
  * annotation.
  * The Query:
  * Annotation == "moz-test-places/testing123" &&
  * TimeRange == "now() - 2d" &&
  * minVisits == 2 &&
- * maxVisits == 10 
+ * maxVisits == 10
  */
 add_task(function test_execute()
 {
   let query = PlacesUtils.history.getNewQuery();
   query.annotation = "moz-test-places/testing123";
   query.beginTime = daybefore * 1000;
   query.beginTimeReference = PlacesUtils.history.TIME_RELATIVE_NOW;
   query.endTime = today * 1000;
--- a/toolkit/components/places/tests/queries/test_onlyBookmarked.js
+++ b/toolkit/components/places/tests/queries/test_onlyBookmarked.js
@@ -52,53 +52,53 @@ add_task(function* test_onlyBookmarked()
 {
   // This function in head_queries.js creates our database with the above data
   yield task_populateDB(testData);
 
   // Query
   var query = PlacesUtils.history.getNewQuery();
   query.setFolders([PlacesUtils.toolbarFolderId], 1);
   query.onlyBookmarked = true;
-  
+
   // query options
   var options = PlacesUtils.history.getNewQueryOptions();
   options.queryType = options.QUERY_TYPE_HISTORY;
 
   // Results - this gets the result set and opens it for reading and modification.
   var result = PlacesUtils.history.executeQuery(query, options);
   var root = result.root;
   root.containerOpen = true;
-  
+
   // You can use this to compare the data in the array with the result set,
   // if the array's isInQuery: true items are sorted the same way as the result
   // set.
   do_print("begin first test");
   compareArrayToResult(testData, root);
   do_print("end first test");
 
   /* ******************
   Test live-update
   ********************/
- 
+
   var liveUpdateTestData = [
     //Add a bookmark that should show up
     { isBookmark: true,
       uri: "http://bookmarked2.com/",
       parentGuid: PlacesUtils.bookmarks.toolbarGuid,
       index: PlacesUtils.bookmarks.DEFAULT_INDEX,
       isInQuery: true },
 
     //Add a bookmark that should not show up
     { isBookmark: true,
       uri: "http://bookmarked-elsewhere2.com/",
       parentGuid: PlacesUtils.bookmarks.menuGuid,
       index: PlacesUtils.bookmarks.DEFAULT_INDEX,
       isInQuery: false }
   ];
-  
+
   yield task_populateDB(liveUpdateTestData); // add to the db
 
   // add to the test data
   testData.push(liveUpdateTestData[0]);
   testData.push(liveUpdateTestData[1]);
 
   // re-query and test
   do_print("begin live-update test");
--- a/toolkit/components/places/tests/queries/test_transitions.js
+++ b/toolkit/components/places/tests/queries/test_transitions.js
@@ -75,17 +75,17 @@ var testData = [
   {
     isVisit: true,
     title: "arewefastyet",
     uri: "http://arewefastyet.com/",
     transType: Ci.nsINavHistoryService.TRANSITION_BOOKMARK
   }];
 // sets of indices of testData array by transition type
 var testDataTyped = [0, 5, 7, 9];
-var testDataDownload = [1, 2, 4, 6, 10]; 
+var testDataDownload = [1, 2, 4, 6, 10];
 var testDataBookmark = [3, 8, 11];
 
 /**
  * run_test is where the magic happens.  This is automatically run by the test
  * harness.  It is where you do the work of creating the query, running it, and
  * playing with the result set.
  */
 function run_test()
--- a/toolkit/components/places/tests/unit/test_331487.js
+++ b/toolkit/components/places/tests/unit/test_331487.js
@@ -4,17 +4,17 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 // Get history service
 try {
   var histsvc = Cc["@mozilla.org/browser/nav-history-service;1"].getService(Ci.nsINavHistoryService);
 } catch(ex) {
   do_throw("Could not get history service\n");
-} 
+}
 
 var bmsvc = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
             getService(Ci.nsINavBookmarksService);
 
 // main
 function run_test() {
   // add a folder
   var folder = bmsvc.createFolder(bmsvc.placesRoot, "test folder", bmsvc.DEFAULT_INDEX);
@@ -83,13 +83,13 @@ function run_test() {
   root.containerOpen = true;
   do_check_eq(root.childCount, 3);
   do_check_eq(root.getChild(0).itemId, b1);
   do_check_eq(root.getChild(1).itemId, b2);
   do_check_eq(root.getChild(2).itemId, b3);
   root.containerOpen = false;
 
   // XXX TODO
-  // test that if we have: more than one query, 
+  // test that if we have: more than one query,
   // multiple folders, a begin time, an end time, a domain, a uri
   // or a search term, that we get the (correct) flat list results
   // (like we do when specified maxResults)
 }
--- a/toolkit/components/places/tests/unit/test_384370.js
+++ b/toolkit/components/places/tests/unit/test_384370.js
@@ -123,17 +123,17 @@ function* testMenuBookmarks() {
   root.containerOpen = false;
 }
 
 function* testToolbarBookmarks() {
   let root = PlacesUtils.getFolderContents(PlacesUtils.toolbarFolderId).root;
 
   // child count (add 2 for pre-existing items)
   Assert.equal(root.childCount, bookmarkData.length + 2);
-  
+
   let livemarkNode = root.getChild(1);
   Assert.equal("Latest Headlines", livemarkNode.title);
 
   let livemark = yield PlacesUtils.livemarks.getLivemark({ id: livemarkNode.itemId });
   Assert.equal("http://en-us.fxfeeds.mozilla.com/en-US/firefox/livebookmarks/",
                livemark.siteURI.spec);
   Assert.equal("http://en-us.fxfeeds.mozilla.com/en-US/firefox/headlines.xml",
                livemark.feedURI.spec);
--- a/toolkit/components/places/tests/unit/test_385397.js
+++ b/toolkit/components/places/tests/unit/test_385397.js
@@ -75,17 +75,17 @@ add_task(function* test_execute()
   options = PlacesUtils.history.getNewQueryOptions();
   options.sortingMode = options.SORT_BY_DATE_DESCENDING;
   options.resultType = options.RESULTS_AS_VISIT;
   root = PlacesUtils.history.executeQuery(PlacesUtils.history.getNewQuery(),
                                               options).root;
   root.containerOpen = true;
   cc = root.childCount;
   // 2 * TOTAL_SITES because we count the TYPED and LINK, but not EMBED or FRAMED
-  do_check_eq(cc, 2 * TOTAL_SITES); 
+  do_check_eq(cc, 2 * TOTAL_SITES);
   for (let i=0; i < TOTAL_SITES; i++) {
     let index = i * 2;
     let node = root.getChild(index);
     let site = "http://www.test-" + (TOTAL_SITES - 1 - i) + ".com/";
     do_check_eq(node.uri, site);
     do_check_eq(node.type, Ci.nsINavHistoryResultNode.RESULT_TYPE_URI);
     node = root.getChild(++index);
     do_check_eq(node.uri, site);
--- a/toolkit/components/places/tests/unit/test_408221.js
+++ b/toolkit/components/places/tests/unit/test_408221.js
@@ -5,54 +5,54 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 var current_test = 0;
 
 function AutoCompleteInput(aSearches) {
   this.searches = aSearches;
 }
 AutoCompleteInput.prototype = {
-  constructor: AutoCompleteInput, 
+  constructor: AutoCompleteInput,
 
   searches: null,
-  
+
   minResultsForPopup: 0,
   timeout: 10,
   searchParam: "",
   textValue: "",
-  disableAutoComplete: false,  
+  disableAutoComplete: false,
   completeDefaultIndex: false,
-  
+
   get searchCount() {
     return this.searches.length;
   },
-  
+
   getSearchAt: function(aIndex) {
     return this.searches[aIndex];
   },
-  
+
   onSearchBegin: function() {},
   onSearchComplete: function() {},
-  
-  popupOpen: false,  
-  
-  popup: { 
+
+  popupOpen: false,
+
+  popup: {
     setSelectedIndex: function(aIndex) {},
     invalidate: function() {},
 
     // nsISupports implementation
     QueryInterface: function(iid) {
       if (iid.equals(Ci.nsISupports) ||
           iid.equals(Ci.nsIAutoCompletePopup))
         return this;
 
       throw Components.results.NS_ERROR_NO_INTERFACE;
-    }    
+    }
   },
-    
+
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteInput))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   }
@@ -64,18 +64,18 @@ try {
                 getService(Ci.nsITaggingService);
 } catch(ex) {
   do_throw("Could not get tagging service\n");
 }
 
 function ensure_tag_results(uris, searchTerm)
 {
   var controller = Components.classes["@mozilla.org/autocomplete/controller;1"].
-                   getService(Components.interfaces.nsIAutoCompleteController);  
-  
+                   getService(Components.interfaces.nsIAutoCompleteController);
+
   // Make an AutoCompleteInput that uses our searches
   // and confirms results on search complete
   var input = new AutoCompleteInput(["history"]);
 
   controller.input = input;
 
   // Search is asynchronous, so don't let the test finish immediately
   do_test_pending();
@@ -83,28 +83,28 @@ function ensure_tag_results(uris, search
   var numSearchesStarted = 0;
   input.onSearchBegin = function() {
     numSearchesStarted++;
     do_check_eq(numSearchesStarted, 1);
   };
 
   input.onSearchComplete = function() {
     do_check_eq(numSearchesStarted, 1);
-    do_check_eq(controller.searchStatus, 
+    do_check_eq(controller.searchStatus,
                 Ci.nsIAutoCompleteController.STATUS_COMPLETE_MATCH);
     do_check_eq(controller.matchCount, uris.length);
     let vals = [];
     for (var i=0; i<controller.matchCount; i++) {
       // Keep the URL for later because order of tag results is undefined
       vals.push(controller.getValueAt(i));
       do_check_eq(controller.getStyleAt(i), "tag");
     }
     // Sort the results then check if we have the right items
     vals.sort().forEach((val, i) => do_check_eq(val, uris[i].spec))
-   
+
     if (current_test < (tests.length - 1)) {
       current_test++;
       tests[current_test]();
     }
 
     do_test_finished();
   };
 
@@ -112,19 +112,19 @@ function ensure_tag_results(uris, search
 }
 
 var uri1 = uri("http://site.tld/1");
 var uri2 = uri("http://site.tld/2");
 var uri3 = uri("http://site.tld/3");
 var uri4 = uri("http://site.tld/4");
 var uri5 = uri("http://site.tld/5");
 var uri6 = uri("http://site.tld/6");
-  
-var tests = [function() { ensure_tag_results([uri1, uri2, uri3], "foo"); }, 
-             function() { ensure_tag_results([uri1, uri2, uri3], "Foo"); }, 
+
+var tests = [function() { ensure_tag_results([uri1, uri2, uri3], "foo"); },
+             function() { ensure_tag_results([uri1, uri2, uri3], "Foo"); },
              function() { ensure_tag_results([uri1, uri2, uri3], "foO"); },
              function() { ensure_tag_results([uri4, uri5, uri6], "bar mud"); },
              function() { ensure_tag_results([uri4, uri5, uri6], "BAR MUD"); },
              function() { ensure_tag_results([uri4, uri5, uri6], "Bar Mud"); }];
 
 /**
  * Properly tags a uri adding it to bookmarks.
  *
@@ -136,17 +136,17 @@ var tests = [function() { ensure_tag_res
 function tagURI(aURI, aTags) {
   PlacesUtils.bookmarks.insertBookmark(PlacesUtils.unfiledBookmarksFolderId,
                                        aURI,
                                        PlacesUtils.bookmarks.DEFAULT_INDEX,
                                        "A title");
   tagssvc.tagURI(aURI, aTags);
 }
 
-/** 
+/**
  * Test bug #408221
  */
 function run_test() {
   // always search in history + bookmarks, no matter what the default is
   var prefs = Cc["@mozilla.org/preferences-service;1"].
               getService(Ci.nsIPrefBranch);
   prefs.setIntPref("browser.urlbar.search.sources", 3);
   prefs.setIntPref("browser.urlbar.default.behavior", 0);
--- a/toolkit/components/places/tests/unit/test_413784.js
+++ b/toolkit/components/places/tests/unit/test_413784.js
@@ -24,25 +24,25 @@ var searchTerm = "ユニコード";
 var decoded = "http://www.foobar.com/" + searchTerm + "/";
 var url = uri(decoded);
 
 function AutoCompleteInput(aSearches) {
   this.searches = aSearches;
 }
 
 AutoCompleteInput.prototype = {
-  constructor: AutoCompleteInput, 
+  constructor: AutoCompleteInput,
 
   searches: null,
 
   minResultsForPopup: 0,
   timeout: 10,
   searchParam: "",
   textValue: "",
-  disableAutoComplete: false,  
+  disableAutoComplete: false,
   completeDefaultIndex: false,
 
   get searchCount() {
     return this.searches.length;
   },
 
   getSearchAt: function(aIndex) {
     return this.searches[aIndex];
--- a/toolkit/components/places/tests/unit/test_419792_node_tags_property.js
+++ b/toolkit/components/places/tests/unit/test_419792_node_tags_property.js
@@ -26,24 +26,24 @@ function run_test() {
   var bookmarkId = bmsvc.insertBookmark(bmsvc.toolbarFolder, bookmarkURI,
                                         bmsvc.DEFAULT_INDEX, "");
 
   // get the node for the new bookmark
   var node = toolbarNode.getChild(toolbarNode.childCount-1);
   do_check_eq(node.itemId, bookmarkId);
 
   // confirm there's no tags via the .tags property
-  do_check_eq(node.tags, null); 
+  do_check_eq(node.tags, null);
 
   // add a tag
   tagssvc.tagURI(bookmarkURI, ["foo"]);
   do_check_eq(node.tags, "foo");
 
   // add another tag, to test delimiter and sorting
   tagssvc.tagURI(bookmarkURI, ["bar"]);
   do_check_eq(node.tags, "bar, foo");
 
   // remove the tags, confirming the property is cleared
   tagssvc.untagURI(bookmarkURI, null);
-  do_check_eq(node.tags, null); 
+  do_check_eq(node.tags, null);
 
   toolbarNode.containerOpen = false;
 }
--- a/toolkit/components/places/tests/unit/test_429505_remove_shortcuts.js
+++ b/toolkit/components/places/tests/unit/test_429505_remove_shortcuts.js
@@ -11,23 +11,23 @@
 - query for the shortcut
 - remove the folder-shortcut
 - confirm the shortcut is removed from the query results
 
 */
 
 function run_test() {
     const IDX = PlacesUtils.bookmarks.DEFAULT_INDEX;
-    var folderId = 
+    var folderId =
       PlacesUtils.bookmarks.createFolder(PlacesUtils.toolbarFolderId, "", IDX);
 
     var queryId =
       PlacesUtils.bookmarks.insertBookmark(PlacesUtils.toolbarFolderId,
                                            uri("place:folder=" + folderId), IDX, "");
-    
+
     var root = PlacesUtils.getFolderContents(PlacesUtils.toolbarFolderId, false, true).root;
 
     var oldCount = root.childCount;
 
     PlacesUtils.bookmarks.removeItem(queryId);
 
     do_check_eq(root.childCount, oldCount-1);
 
--- a/toolkit/components/places/tests/unit/test_PlacesUtils_lazyobservers.js
+++ b/toolkit/components/places/tests/unit/test_PlacesUtils_lazyobservers.js
@@ -1,14 +1,14 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 function run_test() {
   do_test_pending();
-  
+
   const TEST_URI = NetUtil.newURI("http://moz.org/")
   let observer = {
     QueryInterface: XPCOMUtils.generateQI([
       Ci.nsINavBookmarkObserver,
     ]),
 
     onBeginUpdateBatch: function () {},
     onEndUpdateBatch: function () {},
--- a/toolkit/components/places/tests/unit/test_adaptive_bug527311.js
+++ b/toolkit/components/places/tests/unit/test_adaptive_bug527311.js
@@ -123,17 +123,17 @@ function addAdaptiveFeedback(aUrl, aSear
   os.notifyObservers(thing, "autocomplete-will-enter-text", null);
 }
 
 
 function run_test() {
   do_test_pending();
 
   // Add a bookmark to our url.
-  bs.insertBookmark(bs.unfiledBookmarksFolder, uri(TEST_URL),                   
+  bs.insertBookmark(bs.unfiledBookmarksFolder, uri(TEST_URL),
                     bs.DEFAULT_INDEX, "test_book");
   // We want to search only history.
   for (let type of SUGGEST_TYPES) {
     type == "history" ? ps.setBoolPref("browser.urlbar.suggest." + type, true)
                       : ps.setBoolPref("browser.urlbar.suggest." + type, false);
   }
 
   // Add an adaptive entry.
--- a/toolkit/components/places/tests/unit/test_async_history_api.js
+++ b/toolkit/components/places/tests/unit/test_async_history_api.js
@@ -103,17 +103,17 @@ VisitObserver.prototype = {
                     aTime,
                     aSessionId,
                     aReferringId,
                     aTransitionType,
                     aGUID)
   {
     do_print("onVisit(" + aURI.spec + ", " + aVisitId + ", " + aTime +
              ", " + aSessionId + ", " + aReferringId + ", " +
-             aTransitionType + ", " + aGUID + ")"); 
+             aTransitionType + ", " + aGUID + ")");
     if (!this.uri.equals(aURI) || this.guid != aGUID) {
       return;
     }
     this.callback(aTime, aTransitionType);
   },
 };
 
 /**
--- a/toolkit/components/places/tests/unit/test_bookmark_catobs.js
+++ b/toolkit/components/places/tests/unit/test_bookmark_catobs.js
@@ -18,17 +18,17 @@ add_task(function* test_observers() {
   Services.obs.addObserver(function added() {
     Services.obs.removeObserver(added, "dummy-observer-item-added");
     dummyReceivedOnItemAdded = true;
   }, "dummy-observer-item-added", false);
 
   let initialObservers = PlacesUtils.bookmarks.getObservers();
 
   // Add a common observer, it should be invoked after the category observer.
-  let notificationsPromised = new Promise((resolve, reject) => {  
+  let notificationsPromised = new Promise((resolve, reject) => {
     PlacesUtils.bookmarks.addObserver( {
       __proto__: NavBookmarkObserver.prototype,
       onItemAdded() {
         let observers = PlacesUtils.bookmarks.getObservers();
         Assert.equal(observers.length, initialObservers.length + 1);
 
         // Check the common observer is the last one.
         for (let i = 0; i < initialObservers.length; ++i) {
--- a/toolkit/components/places/tests/unit/test_bookmarks_html_import_tags.js
+++ b/toolkit/components/places/tests/unit/test_bookmarks_html_import_tags.js
@@ -23,17 +23,17 @@ add_task(function* test_import_tags() {
   // Removes bookmarks.html if the file already exists.
   let HTMLFile = OS.Path.join(OS.Constants.Path.profileDir, "bookmarks.html");
   if ((yield OS.File.exists(HTMLFile)))
     yield OS.File.remove(HTMLFile);
 
   // Adds bookmarks and tags to the database.
   let bookmarkList = new Set();
   for (let { uri, title, tags } of bookmarkData) {
-    bookmarkList.add(yield PlacesUtils.bookmarks.insert({ 
+    bookmarkList.add(yield PlacesUtils.bookmarks.insert({
                                 parentGuid: PlacesUtils.bookmarks.unfiledGuid,
                                 url: uri,
                                 title }));
     PlacesUtils.tagging.tagURI(uri, tags);
   }
 
   // Exports the bookmarks as a HTML file.
   yield BookmarkHTMLUtils.exportToFile(HTMLFile);
--- a/toolkit/components/places/tests/unit/test_frecency.js
+++ b/toolkit/components/places/tests/unit/test_frecency.js
@@ -115,17 +115,17 @@ try {
                 getService(Ci.nsINavHistoryService);
   var bhist = histsvc.QueryInterface(Ci.nsIBrowserHistory);
   var tagssvc = Cc["@mozilla.org/browser/tagging-service;1"].
                 getService(Ci.nsITaggingService);
   var bmksvc = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
                 getService(Ci.nsINavBookmarksService);
 } catch(ex) {
   do_throw("Could not get history service\n");
-} 
+}
 
 function* task_setCountDate(aURI, aCount, aDate)
 {
   // We need visits so that frecency can be computed over multiple visits
   let visits = [];
   for (let i = 0; i < aCount; i++) {
     visits.push({ uri: aURI, visitDate: aDate, transition: TRANSITION_TYPED });
   }
--- a/toolkit/components/places/tests/unit/test_history.js
+++ b/toolkit/components/places/tests/unit/test_history.js
@@ -119,17 +119,17 @@ add_task(function* test_execute()
   result.root.containerOpen = true;
   do_check_eq(result.root.childCount, 2);
   result.root.containerOpen = false;
   query.maxVisits = 3;
   result = histsvc.executeQuery(query, options);
   result.root.containerOpen = true;
   do_check_eq(result.root.childCount, 2);
   result.root.containerOpen = false;
-  
+
   // test annotation-based queries
   var annos = Cc["@mozilla.org/browser/annotation-service;1"].
               getService(Ci.nsIAnnotationService);
   annos.setPageAnnotation(uri("http://mozilla.com/"), "testAnno", 0, 0,
                           Ci.nsIAnnotationService.EXPIRE_NEVER);
   query.annotation = "testAnno";
   result = histsvc.executeQuery(query, options);
   result.root.containerOpen = true;
--- a/toolkit/components/places/tests/unit/test_history_autocomplete_tags.js
+++ b/toolkit/components/places/tests/unit/test_history_autocomplete_tags.js
@@ -5,54 +5,54 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 var current_test = 0;
 
 function AutoCompleteInput(aSearches) {
   this.searches = aSearches;
 }
 AutoCompleteInput.prototype = {
-  constructor: AutoCompleteInput, 
+  constructor: AutoCompleteInput,
 
   searches: null,
-  
+
   minResultsForPopup: 0,
   timeout: 10,
   searchParam: "",
   textValue: "",
-  disableAutoComplete: false,  
+  disableAutoComplete: false,
   completeDefaultIndex: false,
-  
+
   get searchCount() {
     return this.searches.length;
   },
-  
+
   getSearchAt: function(aIndex) {
     return this.searches[aIndex];
   },
-  
+
   onSearchBegin: function() {},
   onSearchComplete: function() {},
-  
-  popupOpen: false,  
-  
-  popup: { 
+
+  popupOpen: false,
+
+  popup: {
     setSelectedIndex: function(aIndex) {},
     invalidate: function() {},
 
     // nsISupports implementation
     QueryInterface: function(iid) {
       if (iid.equals(Ci.nsISupports) ||
           iid.equals(Ci.nsIAutoCompletePopup))
         return this;
 
       throw Components.results.NS_ERROR_NO_INTERFACE;
-    }    
+    }
   },
-    
+
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteInput))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   }
@@ -65,18 +65,18 @@ try {
 } catch(ex) {
   do_throw("Could not get tagging service\n");
 }
 
 function ensure_tag_results(uris, searchTerm)
 {
   print("Searching for '" + searchTerm + "'");
   var controller = Components.classes["@mozilla.org/autocomplete/controller;1"].
-                   getService(Components.interfaces.nsIAutoCompleteController);  
-  
+                   getService(Components.interfaces.nsIAutoCompleteController);
+
   // Make an AutoCompleteInput that uses our searches
   // and confirms results on search complete
   var input = new AutoCompleteInput(["history"]);
 
   controller.input = input;
 
   // Search is asynchronous, so don't let the test finish immediately
   do_test_pending();
@@ -84,30 +84,30 @@ function ensure_tag_results(uris, search
   var numSearchesStarted = 0;
   input.onSearchBegin = function() {
     numSearchesStarted++;
     do_check_eq(numSearchesStarted, 1);
   };
 
   input.onSearchComplete = function() {
     do_check_eq(numSearchesStarted, 1);
-    do_check_eq(controller.searchStatus, 
+    do_check_eq(controller.searchStatus,
                 uris.length ?
                 Ci.nsIAutoCompleteController.STATUS_COMPLETE_MATCH :
                 Ci.nsIAutoCompleteController.STATUS_COMPLETE_NO_MATCH);
     do_check_eq(controller.matchCount, uris.length);
     let vals = [];
     for (var i=0; i<controller.matchCount; i++) {
       // Keep the URL for later because order of tag results is undefined
       vals.push(controller.getValueAt(i));
       do_check_eq(controller.getStyleAt(i), "tag");
     }
     // Sort the results then check if we have the right items
     vals.sort().forEach((val, i) => do_check_eq(val, uris[i].spec))
-   
+
     if (current_test < (tests.length - 1)) {
       current_test++;
       tests[current_test]();
     }
 
     do_test_finished();
   };
 
@@ -115,17 +115,17 @@ function ensure_tag_results(uris, search
 }
 
 var uri1 = uri("http://site.tld/1/aaa");
 var uri2 = uri("http://site.tld/2/bbb");
 var uri3 = uri("http://site.tld/3/aaa");
 var uri4 = uri("http://site.tld/4/bbb");
 var uri5 = uri("http://site.tld/5/aaa");
 var uri6 = uri("http://site.tld/6/bbb");
-  
+
 var tests = [
   () => ensure_tag_results([uri1, uri4, uri6], "foo"),
   () => ensure_tag_results([uri1], "foo aaa"),
   () => ensure_tag_results([uri4, uri6], "foo bbb"),
   () => ensure_tag_results([uri2, uri4, uri5, uri6], "bar"),
   () => ensure_tag_results([uri5], "bar aaa"),
   () => ensure_tag_results([uri2, uri4, uri6], "bar bbb"),
   () => ensure_tag_results([uri3, uri5, uri6], "cheese"),
@@ -159,17 +159,17 @@ var tests = [
 function tagURI(aURI, aTags) {
   PlacesUtils.bookmarks.insertBookmark(PlacesUtils.unfiledBookmarksFolderId,
                                        aURI,
                                        PlacesUtils.bookmarks.DEFAULT_INDEX,
                                        "A title");
   tagssvc.tagURI(aURI, aTags);
 }
 
-/** 
+/**
  * Test history autocomplete
  */
 function run_test() {
   // always search in history + bookmarks, no matter what the default is
   var prefs = Cc["@mozilla.org/preferences-service;1"].
               getService(Ci.nsIPrefBranch);
   prefs.setIntPref("browser.urlbar.search.sources", 3);
   prefs.setIntPref("browser.urlbar.default.behavior", 0);
--- a/toolkit/components/places/tests/unit/test_history_sidebar.js
+++ b/toolkit/components/places/tests/unit/test_history_sidebar.js
@@ -433,13 +433,13 @@ add_task(function* test_history_sidebar(
   test_RESULTS_AS_DATE_SITE_QUERY();
   test_RESULTS_AS_DATE_QUERY();
   test_RESULTS_AS_SITE_QUERY();
 
   yield task_test_date_liveupdate(Ci.nsINavHistoryQueryOptions.RESULTS_AS_DATE_SITE_QUERY);
   yield task_test_date_liveupdate(Ci.nsINavHistoryQueryOptions.RESULTS_AS_DATE_QUERY);
 
   // The remaining views are
-  //   RESULTS_AS_URI + SORT_BY_VISITCOUNT_DESCENDING 
+  //   RESULTS_AS_URI + SORT_BY_VISITCOUNT_DESCENDING
   //   ->  test_399266.js
   //   RESULTS_AS_URI + SORT_BY_DATE_DESCENDING
   //   ->  test_385397.js
 });
--- a/toolkit/components/places/tests/unit/test_isvisited.js
+++ b/toolkit/components/places/tests/unit/test_isvisited.js
@@ -8,22 +8,22 @@ function run_test()
 {
   run_next_test();
 }
 
 add_task(function* test_execute()
 {
   var referrer = uri("about:blank");
 
-  // add a http:// uri 
+  // add a http:// uri
   var uri1 = uri("http://mozilla.com");
   yield PlacesTestUtils.addVisits({uri: uri1, referrer: referrer});
   do_check_guid_for_uri(uri1);
   do_check_true(yield promiseIsURIVisited(uri1));
- 
+
   // add a https:// uri
   var uri2 = uri("https://etrade.com");
   yield PlacesTestUtils.addVisits({uri: uri2, referrer: referrer});
   do_check_guid_for_uri(uri2);
   do_check_true(yield promiseIsURIVisited(uri2));
 
   // add a ftp:// uri
   var uri3 = uri("ftp://ftp.mozilla.org");
--- a/toolkit/components/places/tests/unit/test_keywords.js
+++ b/toolkit/components/places/tests/unit/test_keywords.js
@@ -27,17 +27,17 @@ function* check_keyword(aExpectExists, a
  * Polls the keywords cache waiting for the given keyword entry.
  */
 function* promiseKeyword(keyword, expectedHref) {
   let href = null;
   do {
     yield new Promise(resolve => do_timeout(100, resolve));
     let entry = yield PlacesUtils.keywords.fetch(keyword);
     if (entry)
-      href = entry.url.href; 
+      href = entry.url.href;
   } while (href != expectedHref);
 }
 
 function* check_no_orphans() {
   let db = yield PlacesUtils.promiseDBConnection();
   let rows = yield db.executeCached(
     `SELECT id FROM moz_keywords k
      WHERE NOT EXISTS (SELECT 1 FROM moz_places WHERE id = k.place_id)
--- a/toolkit/components/places/tests/unit/test_placeURIs.js
+++ b/toolkit/components/places/tests/unit/test_placeURIs.js
@@ -5,17 +5,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 
 // Get history service
 try {
   var histsvc = Cc["@mozilla.org/browser/nav-history-service;1"].getService(Ci.nsINavHistoryService);
 } catch(ex) {
   do_throw("Could not get history service\n");
-} 
+}
 
 // main
 function run_test() {
   // XXX Full testing coverage for QueriesToQueryString and
   // QueryStringToQueries
 
   var bs = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
            getService(Ci.nsINavBookmarksService);
--- a/toolkit/components/places/tests/unit/test_removeVisitsByTimeframe.js
+++ b/toolkit/components/places/tests/unit/test_removeVisitsByTimeframe.js
@@ -12,17 +12,17 @@ function* cleanup() {
   yield PlacesTestUtils.clearHistory();
   yield PlacesUtils.bookmarks.eraseEverything();
   // This is needed to remove place: entries.
   DBConn().executeSimpleSQL("DELETE FROM moz_places");
 }
 
 add_task(function* remove_visits_outside_unbookmarked_uri() {
   do_print("*** TEST: Remove some visits outside valid timeframe from an unbookmarked URI");
- 
+
   do_print("Add 10 visits for the URI from way in the past.");
   let visits = [];
   for (let i = 0; i < 10; i++) {
     visits.push({ uri: TEST_URI, visitDate: NOW - 1000 - i });
   }
   yield PlacesTestUtils.addVisits(visits);
 
   do_print("Remove visits using timerange outside the URI's visits.");
--- a/toolkit/components/places/tests/unit/test_tag_autocomplete_search.js
+++ b/toolkit/components/places/tests/unit/test_tag_autocomplete_search.js
@@ -5,54 +5,54 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 var current_test = 0;
 
 function AutoCompleteInput(aSearches) {
   this.searches = aSearches;
 }
 AutoCompleteInput.prototype = {
-  constructor: AutoCompleteInput, 
+  constructor: AutoCompleteInput,
 
   searches: null,
-  
+
   minResultsForPopup: 0,
   timeout: 10,
   searchParam: "",
   textValue: "",
-  disableAutoComplete: false,  
+  disableAutoComplete: false,
   completeDefaultIndex: false,
-  
+
   get searchCount() {
     return this.searches.length;
   },
-  
+
   getSearchAt: function(aIndex) {
     return this.searches[aIndex];
   },
-  
+
   onSearchBegin: function() {},
   onSearchComplete: function() {},
-  
-  popupOpen: false,  
-  
-  popup: { 
+
+  popupOpen: false,
+
+  popup: {
     setSelectedIndex: function(aIndex) {},
     invalidate: function() {},
 
     // nsISupports implementation
     QueryInterface: function(iid) {
       if (iid.equals(Ci.nsISupports) ||
           iid.equals(Ci.nsIAutoCompletePopup))
         return this;
 
       throw Components.results.NS_ERROR_NO_INTERFACE;
-    }    
+    }
   },
-    
+
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteInput))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   }
@@ -64,37 +64,37 @@ try {
                 getService(Ci.nsITaggingService);
 } catch(ex) {
   do_throw("Could not get tagging service\n");
 }
 
 function ensure_tag_results(results, searchTerm)
 {
   var controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
-  
+                   getService(Ci.nsIAutoCompleteController);
+
   // Make an AutoCompleteInput that uses our searches
   // and confirms results on search complete
   var input = new AutoCompleteInput(["places-tag-autocomplete"]);
 
   controller.input = input;
 
   var numSearchesStarted = 0;
   input.onSearchBegin = function input_onSearchBegin() {
     numSearchesStarted++;
     do_check_eq(numSearchesStarted, 1);
   };
 
   input.onSearchComplete = function input_onSearchComplete() {
     do_check_eq(numSearchesStarted, 1);
     if (results.length)
-      do_check_eq(controller.searchStatus, 
+      do_check_eq(controller.searchStatus,
                   Ci.nsIAutoCompleteController.STATUS_COMPLETE_MATCH);
     else
-      do_check_eq(controller.searchStatus, 
+      do_check_eq(controller.searchStatus,
                   Ci.nsIAutoCompleteController.STATUS_COMPLETE_NO_MATCH);
 
     do_check_eq(controller.matchCount, results.length);
     for (var i=0; i<controller.matchCount; i++) {
       do_check_eq(controller.getValueAt(i), results[i]);
     }
 
     if (current_test < (tests.length - 1)) {
@@ -106,30 +106,30 @@ function ensure_tag_results(results, sea
       do_test_finished();
     }
   };
 
   controller.startSearch(searchTerm);
 }
 
 var uri1 = uri("http://site.tld/1");
-  
+
 var tests = [
   function test1() { ensure_tag_results(["bar", "Baz", "boo"], "b"); },
   function test2() { ensure_tag_results(["bar", "Baz"], "ba"); },
   function test3() { ensure_tag_results(["bar", "Baz"], "Ba"); },
   function test4() { ensure_tag_results(["bar"], "bar"); },
-  function test5() { ensure_tag_results(["Baz"], "Baz"); }, 
-  function test6() { ensure_tag_results([], "barb"); }, 
+  function test5() { ensure_tag_results(["Baz"], "Baz"); },
+  function test6() { ensure_tag_results([], "barb"); },
   function test7() { ensure_tag_results([], "foo"); },
   function test8() { ensure_tag_results(["first tag, bar", "first tag, Baz"], "first tag, ba"); },
   function test9() { ensure_tag_results(["first tag;  bar", "first tag;  Baz"], "first tag;  ba"); }
 ];
 
-/** 
+/**
  * Test tag autocomplete
  */
 function run_test() {
   // Search is asynchronous, so don't let the test finish immediately
   do_test_pending();
 
   tagssvc.tagURI(uri1, ["bar", "Baz", "boo", "*nix"]);
 
--- a/toolkit/components/places/tests/unit/test_utils_getURLsForContainerNode.js
+++ b/toolkit/components/places/tests/unit/test_utils_getURLsForContainerNode.js
@@ -143,17 +143,17 @@ function() {
   bs.insertBookmark(bs.bookmarksMenuFolder, uri("http://www.mozilla.org/"),
                     bs.DEFAULT_INDEX, "bookmark");
   check_uri_nodes(query, options, 1);
 }
 
 ];
 
 /**
- * Executes a query and checks number of uri nodes in the first container in 
+ * Executes a query and checks number of uri nodes in the first container in
  * query's results.  To correctly test a container ensure that the query will
  * return only your container in the first level.
  *
  * @param  aQuery
  *         nsINavHistoryQuery object defining the query
  * @param  aOptions
  *         nsINavHistoryQueryOptions object defining the query's options
  * @param  aExpectedURINodes
--- a/toolkit/components/printing/content/printPageSetup.js
+++ b/toolkit/components/printing/content/printPageSetup.js
@@ -61,22 +61,22 @@ function initDialog()
   gDialog.strings[ "customPrompt.prompt" ] = document.getElementById("customPrompt.prompt").childNodes[0].nodeValue;
 
 }
 
 //---------------------------------------------------
 function isListOfPrinterFeaturesAvailable()
 {
   var has_printerfeatures = false;
-  
+
   try {
     has_printerfeatures = gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".has_special_printerfeatures");
   } catch(ex) {
   }
-  
+
   return has_printerfeatures;
 }
 
 //---------------------------------------------------
 function checkDouble(element)
 {
   element.value = element.value.replace(/[^.0-9]/g, "");
 }
@@ -86,17 +86,17 @@ var gPageWidth  = 8.5;
 var gPageHeight = 11.0;
 
 //---------------------------------------------------
 function setOrientation()
 {
   var selection = gDialog.orientation.selectedItem;
 
   var style = "background-color:white;";
-  if ((selection == gDialog.portrait && gPageWidth > gPageHeight) || 
+  if ((selection == gDialog.portrait && gPageWidth > gPageHeight) ||
       (selection == gDialog.landscape && gPageWidth < gPageHeight)) {
     // Swap width/height.
     var temp = gPageHeight;
     gPageHeight = gPageWidth;
     gPageWidth = temp;
   }
   var div = gDoingMetric ? 100 : 10;
   style += "width:" + gPageWidth/div + unitString() + ";height:" + gPageHeight/div + unitString() + ";";
@@ -231,40 +231,40 @@ function hfIdToValue(node)
   return result;
 }
 
 function setPrinterDefaultsForSelectedPrinter()
 {
   if (gPrintSettings.printerName == "") {
     gPrintSettings.printerName = gPrintService.defaultPrinterName;
   }
-  
-  // First get any defaults from the printer 
+
+  // First get any defaults from the printer
   gPrintService.initPrintSettingsFromPrinter(gPrintSettings.printerName, gPrintSettings);
 
   // now augment them with any values from last time
   gPrintService.initPrintSettingsFromPrefs(gPrintSettings, true, gPrintSettingsInterface.kInitSaveAll);
-  
+
   if (gDoDebug) {
     dump("pagesetup/setPrinterDefaultsForSelectedPrinter: printerName='"+gPrintSettings.printerName+"', orientation='"+gPrintSettings.orientation+"'\n");
   }
 }
 
 //---------------------------------------------------
 function loadDialog()
 {
   var print_orientation   = 0;
   var print_margin_top    = 0.5;
   var print_margin_left   = 0.5;
   var print_margin_bottom = 0.5;
   var print_margin_right  = 0.5;
 
   try {
     gPrefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
-  
+
     gPrintService = Components.classes["@mozilla.org/gfx/printsettings-service;1"];
     if (gPrintService) {
       gPrintService = gPrintService.getService();
       if (gPrintService) {
         gPrintService = gPrintService.QueryInterface(Components.interfaces.nsIPrintSettingsService);
       }
     }
   } catch(ex) {
--- a/toolkit/components/printing/content/printPreviewProgress.js
+++ b/toolkit/components/printing/content/printPreviewProgress.js
@@ -3,17 +3,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 // dialog is just an array we'll use to store various properties from the dialog document...
 var dialog;
 
 // the printProgress is a nsIPrintProgress object
-var printProgress = null; 
+var printProgress = null;
 
 // random global variables...
 var targetFile;
 
 var docTitle = "";
 var docURL   = "";
 var progressParams = null;
 
@@ -23,29 +23,29 @@ function ellipseString(aStr, doFront)
     return aStr;
 
   var fixedLen = 64;
   if (aStr.length <= fixedLen)
     return aStr;
 
   if (doFront)
     return "..." + aStr.substr(aStr.length-fixedLen, fixedLen);
-  
+
   return aStr.substr(0, fixedLen) + "...";
 }
 
 // all progress notifications are done through the nsIWebProgressListener implementation...
 var progressListener = {
 
   onStateChange: function (aWebProgress, aRequest, aStateFlags, aStatus)
   {
     if (aStateFlags & Components.interfaces.nsIWebProgressListener.STATE_STOP)
       window.close();
   },
-  
+
   onProgressChange: function (aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress)
   {
     if (!progressParams)
       return;
     var docTitleStr = ellipseString(progressParams.docTitle, false);
     if (docTitleStr != docTitle) {
       docTitle = docTitleStr;
       dialog.title.value = docTitle;
@@ -65,17 +65,17 @@ var progressListener = {
   {
     if (aMessage)
       dialog.title.setAttribute("value", aMessage);
   },
 
   QueryInterface: function (iid)
   {
     if (iid.equals(Components.interfaces.nsIWebProgressListener) || iid.equals(Components.interfaces.nsISupportsWeakReference))
-      return this;   
+      return this;
     throw Components.results.NS_NOINTERFACE;
   }
 }
 
 function onLoad() {
   // Set global variables.
   printProgress = window.arguments[0];
   if (window.arguments[1]) {
@@ -102,17 +102,17 @@ function onLoad() {
   // set our web progress listener on the helper app launcher
   printProgress.registerListener(progressListener);
   moveToAlertPosition();
 
   //We need to delay the set title else dom will overwrite it
   window.setTimeout(doneIniting, 100);
 }
 
-function onUnload() 
+function onUnload()
 {
   if (!printProgress)
     return;
   try {
     printProgress.unregisterListener(progressListener);
     printProgress = null;
   }
   catch(e) {}
@@ -131,25 +131,25 @@ function getString (stringId) {
       else
         dialog.strings[stringId] = "";
     } catch (e) { dialog.strings[stringId] = ""; }
   }
   return dialog.strings[stringId];
 }
 
 // If the user presses cancel, tell the app launcher and close the dialog...
-function onCancel () 
+function onCancel ()
 {
   // Cancel app launcher.
   try {
     printProgress.processCanceledByUser = true;
   }
   catch(e) {return true;}
-    
+
   // don't Close up dialog by returning false, the backend will close the dialog when everything will be aborted.
   return false;
 }
 
-function doneIniting() 
+function doneIniting()
 {
   // called by function timeout in onLoad
   printProgress.doneIniting();
 }
--- a/toolkit/components/printing/content/printProgress.js
+++ b/toolkit/components/printing/content/printProgress.js
@@ -3,17 +3,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 // dialog is just an array we'll use to store various properties from the dialog document...
 var dialog;
 
 // the printProgress is a nsIPrintProgress object
-var printProgress = null; 
+var printProgress = null;
 
 // random global variables...
 var targetFile;
 
 var docTitle = "";
 var docURL   = "";
 var progressParams = null;
 var switchUI = true;
@@ -42,20 +42,20 @@ var progressListener = {
     onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus)
     {
       if (aStateFlags & Components.interfaces.nsIWebProgressListener.STATE_START)
       {
         // Put progress meter in undetermined mode.
         // dialog.progress.setAttribute( "value", 0 );
         dialog.progress.setAttribute( "mode", "undetermined" );
       }
-      
+
       if (aStateFlags & Components.interfaces.nsIWebProgressListener.STATE_STOP)
       {
-        // we are done printing 
+        // we are done printing
         // Indicate completion in title area.
         var msg = getString( "printComplete" );
         dialog.title.setAttribute("value", msg);
 
         // Put progress meter at 100%.
         dialog.progress.setAttribute( "value", 100 );
         dialog.progress.setAttribute( "mode", "normal" );
         var percentPrint = getString( "progressText" );
@@ -79,20 +79,20 @@ var progressListener = {
           // switching focus to another window (or holding on to the
           // progress dialog with the mouse long enough).
           opener.focus();
         }
 
         window.close();
       }
     },
-    
+
     onProgressChange: function(aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress)
     {
-      if (switchUI) 
+      if (switchUI)
       {
         dialog.tempLabel.setAttribute("hidden", "true");
         dialog.progress.setAttribute("hidden", "false");
         dialog.cancel.setAttribute("disabled", "false");
 
         var progressLabel = getString("progress");
         if (progressLabel == "") {
           progressLabel = "Progress:"; // better than nothing
@@ -113,33 +113,33 @@ var progressListener = {
           if (docTitle == "") {
             dialog.title.value = ellipseString(docURLStr, true);
           }
         }
       }
 
       // Calculate percentage.
       var percent;
-      if ( aMaxTotalProgress > 0 ) 
+      if ( aMaxTotalProgress > 0 )
       {
         percent = Math.round( (aCurTotalProgress*100)/aMaxTotalProgress );
         if ( percent > 100 )
           percent = 100;
-        
+
         dialog.progress.removeAttribute( "mode");
-        
+
         // Advance progress meter.
         dialog.progress.setAttribute( "value", percent );
 
         // Update percentage label on progress meter.
         var percentPrint = getString( "progressText" );
         percentPrint = replaceInsert( percentPrint, 1, percent );
         dialog.progressText.setAttribute("value", percentPrint);
-      } 
-      else 
+      }
+      else
       {
         // Progress meter should be barber-pole in this case.
         dialog.progress.setAttribute( "mode", "undetermined" );
         // Update percentage label on progress meter.
         dialog.progressText.setAttribute("value", "");
       }
     },
 
@@ -158,17 +158,17 @@ var progressListener = {
     {
       // we can ignore this notification
     },
 
     QueryInterface : function(iid)
     {
      if (iid.equals(Components.interfaces.nsIWebProgressListener) || iid.equals(Components.interfaces.nsISupportsWeakReference))
       return this;
-     
+
      throw Components.results.NS_NOINTERFACE;
     }
 };
 
 function getString( stringId ) {
    // Check if we've fetched this string already.
    if (!(stringId in dialog.strings)) {
       // Try to get it.
@@ -186,17 +186,17 @@ function getString( stringId ) {
           // If unable to fetch string, use an empty string.
           dialog.strings[ stringId ] = "";
         }
       } catch (e) { dialog.strings[ stringId ] = ""; }
    }
    return dialog.strings[ stringId ];
 }
 
-function loadDialog() 
+function loadDialog()
 {
 }
 
 function replaceInsert( text, index, value ) {
    var result = text;
    var regExp = new RegExp( "#"+index );
    result = result.replace( regExp, value );
    return result;
@@ -252,40 +252,40 @@ function onLoad() {
 
     // set our web progress listener on the helper app launcher
     printProgress.registerListener(progressListener);
     moveToAlertPosition();
     //We need to delay the set title else dom will overwrite it
     window.setTimeout(doneIniting, 500);
 }
 
-function onUnload() 
+function onUnload()
 {
   if (printProgress)
   {
-   try 
+   try
    {
      printProgress.unregisterListener(progressListener);
      printProgress = null;
    }
-    
+
    catch( exception ) {}
   }
 }
 
 // If the user presses cancel, tell the app launcher and close the dialog...
-function onCancel () 
+function onCancel ()
 {
   // Cancel app launcher.
-   try 
+   try
    {
      printProgress.processCanceledByUser = true;
    }
    catch( exception ) {return true;}
-    
+
   // don't Close up dialog by returning false, the backend will close the dialog when everything will be aborted.
   return false;
 }
 
-function doneIniting() 
+function doneIniting()
 {
   printProgress.doneIniting();
 }
--- a/toolkit/components/printing/content/printUtils.js
+++ b/toolkit/components/printing/content/printUtils.js
@@ -422,17 +422,17 @@ var PrintUtils = {
     }
   },
 
   setPrinterDefaultsForSelectedPrinter: function (aPSSVC, aPrintSettings)
   {
     if (!aPrintSettings.printerName)
       aPrintSettings.printerName = aPSSVC.defaultPrinterName;
 
-    // First get any defaults from the printer 
+    // First get any defaults from the printer
     aPSSVC.initPrintSettingsFromPrinter(aPrintSettings.printerName, aPrintSettings);
     // now augment them with any values from last time
     aPSSVC.initPrintSettingsFromPrefs(aPrintSettings, true,  aPrintSettings.kInitSaveAll);
   },
 
   getPrintSettings: function ()
   {
     var pref = Components.classes["@mozilla.org/preferences-service;1"]
--- a/toolkit/components/printing/content/printdialog.js
+++ b/toolkit/components/printing/content/printdialog.js
@@ -27,17 +27,17 @@ function initDialog()
   dialog.allpagesRadio   = document.getElementById("allpagesRadio");
   dialog.rangeRadio      = document.getElementById("rangeRadio");
   dialog.selectionRadio  = document.getElementById("selectionRadio");
   dialog.frompageInput   = document.getElementById("frompageInput");
   dialog.frompageLabel   = document.getElementById("frompageLabel");
   dialog.topageInput     = document.getElementById("topageInput");
   dialog.topageLabel     = document.getElementById("topageLabel");
 
-  dialog.numCopiesInput  = document.getElementById("numCopiesInput");  
+  dialog.numCopiesInput  = document.getElementById("numCopiesInput");
 
   dialog.printframeGroup      = document.getElementById("printframeGroup");
   dialog.aslaidoutRadio       = document.getElementById("aslaidoutRadio");
   dialog.selectedframeRadio   = document.getElementById("selectedframeRadio");
   dialog.eachframesepRadio    = document.getElementById("eachframesepRadio");
   dialog.printframeGroupLabel = document.getElementById("printframeGroupLabel");
 
   dialog.fileCheck       = document.getElementById("fileCheck");
@@ -81,17 +81,17 @@ function getPrinterDescription(printerNa
 {
   var s = "";
 
   try {
     /* This may not work with non-ASCII test (see bug 235763 comment #16) */
     s = gPrefs.getCharPref("print.printer_" + printerName + ".printer_description")
   } catch(e) {
   }
-    
+
   return s;
 }
 
 //---------------------------------------------------
 function listElement(aListElement)
   {
     this.listElement = aListElement;
   }
@@ -103,42 +103,42 @@ listElement.prototype =
         {
           // remove the menupopup node child of the menulist.
           var popup = this.listElement.firstChild;
           if (popup) {
             this.listElement.removeChild(popup);
           }
         },
 
-    appendPrinterNames: 
-      function (aDataObject) 
-        { 
+    appendPrinterNames:
+      function (aDataObject)
+        {
           if ((null == aDataObject) || !aDataObject.hasMore()) {
             // disable dialog
             this.listElement.setAttribute("value", "");
             this.listElement.setAttribute("label",
               document.getElementById("printingBundle")
                       .getString("noprinter"));
 
             this.listElement.setAttribute("disabled", "true");
             dialog.printerLabel.setAttribute("disabled","true");
             dialog.propertiesButton.setAttribute("disabled","true");
             dialog.fileCheck.setAttribute("disabled","true");
             dialog.printButton.setAttribute("disabled","true");
           }
           else {
             // build popup menu from printer names
-            var list = document.getElementById("printerList"); 
+            var list = document.getElementById("printerList");
             do {
               printerNameStr = aDataObject.getNext();
               list.appendItem(printerNameStr, printerNameStr, getPrinterDescription(printerNameStr));
             } while (aDataObject.hasMore());
             this.listElement.removeAttribute("disabled");
           }
-        } 
+        }
   };
 
 //---------------------------------------------------
 function getPrinters()
 {
   var selectElement = new listElement(dialog.printerList);
   selectElement.clearList();
 
@@ -158,25 +158,25 @@ function getPrinters()
 }
 
 
 //---------------------------------------------------
 // update gPrintSettings with the defaults for the selected printer
 function setPrinterDefaultsForSelectedPrinter()
 {
   gPrintSettings.printerName = dialog.printerList.value;
-  
+
   dialog.descText.value = getPrinterDescription(gPrintSettings.printerName);
-  
-  // First get any defaults from the printer 
+
+  // First get any defaults from the printer
   printService.initPrintSettingsFromPrinter(gPrintSettings.printerName, gPrintSettings);
-  
+
   // now augment them with any values from last time
   printService.initPrintSettingsFromPrefs(gPrintSettings, true, gPrintSetInterface.kInitSaveAll);
-  
+
   if (doDebug) {
     dump("setPrinterDefaultsForSelectedPrinter: printerName='"+gPrintSettings.printerName+"', paperName='"+gPrintSettings.paperName+"'\n");
   }
 }
 
 //---------------------------------------------------
 function displayPropertiesDialog()
 {
@@ -366,17 +366,17 @@ function onAccept()
     }
   }
 
   var saveToPrefs = false;
 
   saveToPrefs = gPrefs.getBoolPref("print.save_print_settings");
 
   if (saveToPrefs && printService != null) {
-    var flags = gPrintSetInterface.kInitSavePaperSize      | 
+    var flags = gPrintSetInterface.kInitSavePaperSize      |
                 gPrintSetInterface.kInitSaveEdges          |
                 gPrintSetInterface.kInitSaveInColor        |
                 gPrintSetInterface.kInitSaveShrinkToFit    |
                 gPrintSetInterface.kInitSaveScaling;
     printService.savePrintSettingsToPrefs(gPrintSettings, true, flags);
   }
 
   // set return value to "print"
--- a/toolkit/components/printing/content/printjoboptions.js
+++ b/toolkit/components/printing/content/printjoboptions.js
@@ -31,22 +31,22 @@ function checkDouble(element, maxVal)
     }
   }
 }
 
 //---------------------------------------------------
 function isListOfPrinterFeaturesAvailable()
 {
   var has_printerfeatures = false;
-  
+
   try {
     has_printerfeatures = gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".has_special_printerfeatures");
   } catch(ex) {
   }
-  
+
   return has_printerfeatures;
 }
 
 //---------------------------------------------------
 function getDoubleStr(val, dec)
 {
   var str = val.toString();
   var inx = str.indexOf(".");
@@ -61,17 +61,17 @@ function initDialog()
   dialog = new Object;
 
   dialog.paperList       = document.getElementById("paperList");
   dialog.paperGroup      = document.getElementById("paperGroup");
 
   dialog.jobTitleLabel   = document.getElementById("jobTitleLabel");
   dialog.jobTitleGroup   = document.getElementById("jobTitleGroup");
   dialog.jobTitleInput   = document.getElementById("jobTitleInput");
-    
+
   dialog.colorGroup      = document.getElementById("colorGroup");
   dialog.colorRadioGroup = document.getElementById("colorRadioGroup");
   dialog.colorRadio      = document.getElementById("colorRadio");
   dialog.grayRadio       = document.getElementById("grayRadio");
 
   dialog.topInput        = document.getElementById("topInput");
   dialog.bottomInput     = document.getElementById("bottomInput");
   dialog.leftInput       = document.getElementById("leftInput");
@@ -95,43 +95,43 @@ paperListElement.prototype =
   {
     clearPaperList:
       function ()
         {
           // remove the menupopup node child of the menulist.
           this.paperListElement.removeChild(this.paperListElement.firstChild);
         },
 
-    appendPaperNames: 
-      function (aDataObject) 
-        { 
-          var popupNode = document.createElement("menupopup"); 
+    appendPaperNames:
+      function (aDataObject)
+        {
+          var popupNode = document.createElement("menupopup");
           for (var i=0;i<aDataObject.length;i++)  {
             var paperObj = aDataObject[i];
             var itemNode = document.createElement("menuitem");
             var label;
             try {
               label = gPrintBundle.getString(paperObj.name);
-            } 
+            }
             catch (e) {
               /* No name in string bundle ? Then build one manually (this
-               * usually happens when gPaperArray was build by createPaperArrayFromPrinterFeatures() ...) */              
+               * usually happens when gPaperArray was build by createPaperArrayFromPrinterFeatures() ...) */
               if (paperObj.inches) {
                 label = paperObj.name + " (" + round10(paperObj.width) + "x" + round10(paperObj.height) + " inch)";
-              }  
+              }
               else {
                 label = paperObj.name + " (" + paperObj.width + "x" + paperObj.height + " mm)";
               }
             }
             itemNode.setAttribute("label", label);
             itemNode.setAttribute("value", i);
-            popupNode.appendChild(itemNode);            
+            popupNode.appendChild(itemNode);
           }
-          this.paperListElement.appendChild(popupNode); 
-        } 
+          this.paperListElement.appendChild(popupNode);
+        }
   };
 
 //---------------------------------------------------
 function createPaperArrayFromDefaults()
 {
   var paperNames   = ["letterSize", "legalSize", "exectiveSize", "a5Size", "a4Size", "a3Size", "a2Size", "a1Size", "a0Size"];
   //var paperNames   = ["&letterRadio.label;", "&legalRadio.label;", "&exectiveRadio.label;", "&a4Radio.label;", "&a3Radio.label;"];
   var paperWidths  = [ 8.5,  8.5,  7.25, 148.0, 210.0, 287.0, 420.0, 594.0,  841.0];
@@ -143,76 +143,76 @@ function createPaperArrayFromDefaults()
   gPaperArray = new Array();
 
   for (var i=0;i<paperNames.length;i++) {
     var obj    = new Object();
     obj.name   = paperNames[i];
     obj.width  = paperWidths[i];
     obj.height = paperHeights[i];
     obj.inches = paperInches[i];
-    
+
     /* Calculate the width/height in millimeters */
     if (paperInches[i]) {
       obj.width_mm  = paperWidths[i]  * 25.4;
-      obj.height_mm = paperHeights[i] * 25.4; 
+      obj.height_mm = paperHeights[i] * 25.4;
     }
     else {
       obj.width_mm  = paperWidths[i];
-      obj.height_mm = paperHeights[i];        
+      obj.height_mm = paperHeights[i];
     }
     gPaperArray[i] = obj;
   }
 }
 
 //---------------------------------------------------
 function createPaperArrayFromPrinterFeatures()
 {
   var printername = gPrintSettings.printerName;
   if (doDebug) {
     dump("createPaperArrayFromPrinterFeatures for " + printername + ".\n");
   }
 
   gPaperArray = new Array();
-  
+
   var numPapers = gPrefs.getIntPref("print.tmp.printerfeatures." + printername + ".paper.count");
-  
+
   if (doDebug) {
     dump("processing " + numPapers + " entries...\n");
-  }    
+  }
 
   for (var i=0;i<numPapers;i++) {
     var obj    = new Object();
     obj.name      = gPrefs.getCharPref("print.tmp.printerfeatures." + printername + ".paper." + i + ".name");
     obj.width_mm  = gPrefs.getIntPref("print.tmp.printerfeatures."  + printername + ".paper." + i + ".width_mm");
     obj.height_mm = gPrefs.getIntPref("print.tmp.printerfeatures."  + printername + ".paper." + i + ".height_mm");
     obj.inches    = gPrefs.getBoolPref("print.tmp.printerfeatures." + printername + ".paper." + i + ".is_inch");
-    
+
     /* Calculate the width/height in paper's native units (either inches or millimeters) */
     if (obj.inches) {
       obj.width  = obj.width_mm  / 25.4;
-      obj.height = obj.height_mm / 25.4; 
+      obj.height = obj.height_mm / 25.4;
     }
     else {
       obj.width  = obj.width_mm;
       obj.height = obj.height_mm;
     }
 
     gPaperArray[i] = obj;
 
     if (doDebug) {
       dump("paper index=" + i + ", name=" + obj.name + ", width=" + obj.width + ", height=" + obj.height + ".\n");
     }
-  }  
+  }
 }
 
 //---------------------------------------------------
 function createPaperArray()
-{  
+{
   if (isListOfPrinterFeaturesAvailable()) {
-    createPaperArrayFromPrinterFeatures();    
+    createPaperArrayFromPrinterFeatures();
   }
   else {
     createPaperArrayFromDefaults();
   }
 }
 
 //---------------------------------------------------
 function createPaperSizeList(selectedInx)
@@ -258,23 +258,23 @@ function loadDialog()
     dump("paperName       "+print_paper_name+"\n");
     dump("print_color     "+print_color+"\n");
     dump("print_jobtitle   "+print_jobtitle+"\n");
   }
 
   createPaperArray();
 
   var paperSelectedInx = 0;
-  for (var i=0;i<gPaperArray.length;i++) { 
+  for (var i=0;i<gPaperArray.length;i++) {
     if (print_paper_name == gPaperArray[i].name) {
       paperSelectedInx = i;
       break;
     }
   }
-  
+
   if (doDebug) {
     if (i == gPaperArray.length)
       dump("loadDialog: No paper found.\n");
     else
       dump("loadDialog: found paper '"+gPaperArray[paperSelectedInx].name+"'.\n");
   }
 
   createPaperSizeList(paperSelectedInx);
@@ -297,17 +297,17 @@ function loadDialog()
     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".can_change_paper_size"))
       dialog.paperList.removeAttribute("disabled");
     else
       dialog.paperList.setAttribute("disabled","true");
     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".supports_paper_size_change"))
       dialog.paperGroup.removeAttribute("hidden");
     else
       dialog.paperGroup.setAttribute("hidden","true");
-            
+
     // color/grayscale radio
     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".can_change_printincolor"))
       dialog.colorRadioGroup.removeAttribute("disabled");
     else
       dialog.colorRadioGroup.setAttribute("disabled","true");
     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".supports_printincolor_change"))
       dialog.colorGroup.removeAttribute("hidden");
     else
--- a/toolkit/components/prompts/test/test_bug619644.html
+++ b/toolkit/components/prompts/test/test_bug619644.html
@@ -23,17 +23,17 @@ function hasTabModalPrompts() {
 
 if (!hasTabModalPrompts()) {
   todo(false, "Test disabled when tab modal prompts are not enabled.");
 } else {
 SimpleTest.waitForExplicitFinish();
 
 // This is a little yucky, but it works
 // The contents of bug619644_inner.html
-const expectedFinalDoc = 
+const expectedFinalDoc =
 "<head><\/head><body><p>Original content<\/p>\n<script>\n    window.opener.postMessage(\"\", \"*\");\n    confirm (\"Message\");\n    document.write (\"Extra content\");\n    window.opener.postMessage(document.documentElement.innerHTML, \"*\");\n<\/script>Extra content<\/body>";
 
 function runtest(e)
 {
   window.removeEventListener("message", runtest, false);
   window.addEventListener("message", checktest, false);
   synthesizeKey("VK_ESCAPE", {}, e.source);
 }
--- a/toolkit/components/satchel/test/test_form_autocomplete.html
+++ b/toolkit/components/satchel/test/test_form_autocomplete.html
@@ -211,17 +211,17 @@ function popupShownListener()
 registerPopupShownListener(popupShownListener);
 
 /*
  * Main section of test...
  *
  * This is a bit hacky, as many operations happen asynchronously.
  * Various mechanisms call runTests as a result of operations:
  *   - set expectingPopup to true, and the next test will occur when the autocomplete popup is shown
- *   - call waitForMenuChange(x) to run the next test when the autocomplete popup to have x items in it 
+ *   - call waitForMenuChange(x) to run the next test when the autocomplete popup to have x items in it
  *   - addEntry calls runs the test when an entry has been added
  *   - some tests scroll the window. This is because the form fill controller happens to scroll
  *     the field into view near the end of the search, and there isn't any other good notification
  *     to listen to for when the search is complete.
  *   - some items still use setTimeout
  */
 function runTest() {
   testNum++;
--- a/toolkit/components/satchel/test/test_form_autocomplete_with_list.html
+++ b/toolkit/components/satchel/test/test_form_autocomplete_with_list.html
@@ -94,17 +94,17 @@ function popupShownListener() {
 registerPopupShownListener(popupShownListener);
 
 /*
 * Main section of test...
 *
 * This is a bit hacky, as many operations happen asynchronously.
 * Various mechanisms call runTests as a result of operations:
 *   - set expectingPopup to true, and the next test will occur when the autocomplete popup is shown
-*   - call waitForMenuChange(x) to run the next test when the autocomplete popup to have x items in it 
+*   - call waitForMenuChange(x) to run the next test when the autocomplete popup to have x items in it
 */
 function runTest() {
     testNum++;
 
     info("Starting test #" + testNum);
 
     switch(testNum) {
     case 1:
@@ -163,17 +163,17 @@ function runTest() {
         doKey("down");
         doKey("down");
         doKey("return");
         checkForm("final");
         expectPopup();
         restoreForm();
         doKey("down");
         break;
-        
+
     case 6:
         //Delete the first entry (of 3)
         doKey("down");
         doKey("delete", shiftModifier);
         waitForMenuChange(3);
         break;
 
     case 7:
--- a/toolkit/components/social/WorkerAPI.jsm
+++ b/toolkit/components/social/WorkerAPI.jsm
@@ -140,12 +140,12 @@ WorkerAPI.prototype = {
       }
       alertsService.showAlertNotification(icon,
                                           this._provider.name, // title
                                           body,
                                           !!action, // text clickable if an
                                                     // action was provided.
                                           null,
                                           listener,
-                                          type); 
+                                          type);
     },
   }
 }
--- a/toolkit/components/telemetry/tests/unit/test_TelemetryController.js
+++ b/toolkit/components/telemetry/tests/unit/test_TelemetryController.js
@@ -1,10 +1,10 @@
 /* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ 
+   http://creativecommons.org/publicdomain/zero/1.0/
 */
 /* This testcase triggers two telemetry pings.
  *
  * Telemetry code keeps histograms of past telemetry pings. The first
  * ping populates these histograms. One of those histograms is then
  * checked in the second request.
  */
 
--- a/toolkit/components/telemetry/tests/unit/test_TelemetryLateWrites.js
+++ b/toolkit/components/telemetry/tests/unit/test_TelemetryLateWrites.js
@@ -1,10 +1,10 @@
 /* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ 
+   http://creativecommons.org/publicdomain/zero/1.0/
 */
 /* A testcase to make sure reading late writes stacks works.  */
 
 Cu.import("resource://gre/modules/Services.jsm", this);
 
 // Constants from prio.h for nsIFileOutputStream.init
 const PR_WRONLY = 0x2;
 const PR_CREATE_FILE = 0x8;
--- a/toolkit/components/telemetry/tests/unit/test_TelemetryLockCount.js
+++ b/toolkit/components/telemetry/tests/unit/test_TelemetryLockCount.js
@@ -1,10 +1,10 @@
 /* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ 
+   http://creativecommons.org/publicdomain/zero/1.0/
 */
 /* A testcase to make sure reading the failed profile lock count works.  */
 
 Cu.import("resource://gre/modules/Services.jsm", this);
 
 const LOCK_FILE_NAME = "Telemetry.FailedProfileLocks.txt";
 const N_FAILED_LOCKS = 10;
 
--- a/toolkit/components/telemetry/tests/unit/test_nsITelemetry.js
+++ b/toolkit/components/telemetry/tests/unit/test_nsITelemetry.js
@@ -169,17 +169,17 @@ function test_count_histogram()
   do_check_eq(s.sum, 2);
 }
 
 function test_getHistogramById() {
   try {
     Telemetry.getHistogramById("nonexistent");
     do_throw("This can't happen");
   } catch (e) {
-    
+
   }
   var h = Telemetry.getHistogramById("CYCLE_COLLECTOR");
   var s = h.snapshot();
   do_check_eq(s.histogram_type, Telemetry.HISTOGRAM_EXPONENTIAL);
   do_check_eq(s.min, 1);
   do_check_eq(s.max, 10000);
 }
 
--- a/toolkit/components/thumbnails/test/browser_thumbnails_storage.js
+++ b/toolkit/components/thumbnails/test/browser_thumbnails_storage.js
@@ -50,17 +50,17 @@ function* runTests() {
     yield promiseCreateThumbnail();
 
     info("Clearing the last 10 minutes of browsing history");
     // Clear the last 10 minutes of browsing history.
     yield promiseClearHistory(true);
 
     info("Attempt to clear file");
     // Retry until the file is gone because Windows locks it sometimes.
-    yield promiseClearFile(file, URL);    
+    yield promiseClearFile(file, URL);
 
     info("Done");
   });
 }
 
 var promiseClearFile = Task.async(function*(aFile, aURL) {
   if (!aFile.exists()) {
     return undefined;
--- a/toolkit/components/timermanager/nsUpdateTimerManager.js
+++ b/toolkit/components/timermanager/nsUpdateTimerManager.js
@@ -247,17 +247,17 @@ TimerManager.prototype = {
 
     if (callbackToFire)
       callbackToFire();
 
     if (nextDelay !== null) {
       if (skippedFirings)
         timer.delay = this._timerMinimumDelay;
       else
-        timer.delay = Math.max(nextDelay * 1000, this._timerMinimumDelay);  
+        timer.delay = Math.max(nextDelay * 1000, this._timerMinimumDelay);
       this.lastTimerReset = Date.now();
     } else {
       this._cancelTimer();
     }
   },
 
   /**
    * Starts the timer, if necessary, and ensures that it will fire soon enough
@@ -267,17 +267,17 @@ TimerManager.prototype = {
     if (!this._canEnsureTimer)
       return;
     if (!this._timer) {
       this._timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
       this._timer.initWithCallback(this, interval,
                                    Ci.nsITimer.TYPE_REPEATING_SLACK);
       this.lastTimerReset = Date.now();
     } else {
-      if (Date.now() + interval < this.lastTimerReset + this._timer.delay) 
+      if (Date.now() + interval < this.lastTimerReset + this._timer.delay)
         this._timer.delay = Math.max(this.lastTimerReset + interval - Date.now(), 0);
     }
   },
 
   /**
    * Stops the timer, if it is running.
    */
   _cancelTimer: function() {
--- a/toolkit/components/viewconfig/content/config.js
+++ b/toolkit/components/viewconfig/content/config.js
@@ -40,21 +40,21 @@ var gSortDirection = 1; // 1 is ascendin
 var gConfigBundle = null;
 var gFilter = null;
 
 var view = {
   get rowCount() { return gPrefView.length; },
   getCellText : function(index, col) {
     if (!(index in gPrefView))
       return "";
-    
+
     var value = gPrefView[index][col.id];
 
     switch (col.id) {
-      case "lockCol":           
+      case "lockCol":
         return gLockStrs[value];
       case "typeCol":
         return gTypeStrs[value];
       default:
         return value;
     }
   },
   getRowProperties : function(index) { return ""; },
@@ -356,17 +356,17 @@ function ShowPrefs()
     var ascending = document.getElementsByAttribute("sortDirection", "ascending");
     if (ascending.item(0))
       gSortedColumn = ascending[0].id;
     else
       document.getElementById(gSortedColumn).setAttribute("sortDirection", "ascending");
   }
   gSortFunction = gSortFunctions[gSortedColumn];
   gPrefArray.sort(gSortFunction);
-  
+
   gPrefBranch.addObserver("", gPrefListener, false);
 
   var configTree = document.getElementById("configTree");
   configTree.view = view;
   configTree.controllers.insertControllerAt(0, configController);
 
   document.getElementById("configDeck").setAttribute("selectedIndex", 1);
   document.getElementById("configTreeKeyset").removeAttribute("disabled");
@@ -436,49 +436,49 @@ function FilterPrefs()
   view.treebox.rowCountChanged(oldlen, gPrefView.length - oldlen);
   gotoPref(prefCol);
 }
 
 function prefColSortFunction(x, y)
 {
   if (x.prefCol > y.prefCol)
     return gSortDirection;
-  if (x.prefCol < y.prefCol) 
+  if (x.prefCol < y.prefCol)
     return -gSortDirection;
   return 0;
 }
 
 function lockColSortFunction(x, y)
 {
   if (x.lockCol != y.lockCol)
     return gSortDirection * (y.lockCol - x.lockCol);
   return prefColSortFunction(x, y);
 }
 
 function typeColSortFunction(x, y)
 {
-  if (x.typeCol != y.typeCol) 
+  if (x.typeCol != y.typeCol)
     return gSortDirection * (y.typeCol - x.typeCol);
   return prefColSortFunction(x, y);
 }
 
 function valueColSortFunction(x, y)
 {
   if (x.valueCol > y.valueCol)
     return gSortDirection;
-  if (x.valueCol < y.valueCol) 
+  if (x.valueCol < y.valueCol)
     return -gSortDirection;
   return prefColSortFunction(x, y);
 }
 
 const gSortFunctions =
 {
-  prefCol: prefColSortFunction, 
-  lockCol: lockColSortFunction, 
-  typeCol: typeColSortFunction, 
+  prefCol: prefColSortFunction,
+  lockCol: lockColSortFunction,
+  typeCol: typeColSortFunction,
   valueCol: valueColSortFunction
 };
 
 const configController = {
   supportsCommand: function supportsCommand(command) {
     return command == "cmd_copy";
   },
   isCommandEnabled: function isCommandEnabled(command) {
--- a/toolkit/content/findUtils.js
+++ b/toolkit/content/findUtils.js
@@ -32,17 +32,17 @@ nsFindInstData.prototype =
   get webBrowserFind() { return this.browser.webBrowserFind; },
 
   init : function() {
     var findInst = this.webBrowserFind;
     // set up the find to search the focussedWindow, bounded by the content window.
     var findInFrames = findInst.QueryInterface(Components.interfaces.nsIWebBrowserFindInFrames);
     findInFrames.rootSearchFrame = this.rootSearchWindow;
     findInFrames.currentSearchFrame = this.currentSearchWindow;
-  
+
     // always search in frames for now. We could add a checkbox to the dialog for this.
     findInst.searchFrames = true;
   },
 
   window : window,
   _root : null,
   _current : null
 }
@@ -93,17 +93,17 @@ function findAgainInPage(findInstData, r
     if (!found) {
       if (!gFindBundle)
         gFindBundle = document.getElementById("findBundle");
 
       Services.prompt.alert(window, gFindBundle.getString("notFoundTitle"), gFindBundle.getString("notFoundWarning"));
     }
 
     // Reset to normal value, otherwise setting can get changed in find dialog
-    findInst.findBackwards = findService.findBackwards; 
+    findInst.findBackwards = findService.findBackwards;
   }
 }
 
 function canFindAgainInPage()
 {
     var findService = Components.classes["@mozilla.org/find/find_service;1"]
                            .getService(Components.interfaces.nsIFindService);
     return (findService.searchString.length > 0);
--- a/toolkit/content/finddialog.js
+++ b/toolkit/content/finddialog.js
@@ -33,17 +33,17 @@ function initDialogObject()
   }
 }
 
 function fillDialog()
 {
   // get the find service, which stores global find state
   var findService = Components.classes["@mozilla.org/find/find_service;1"]
                               .getService(Components.interfaces.nsIFindService);
-  
+
   // Set initial dialog field contents. Use the gFindInst attributes first,
   // this is necessary for window.find()
   dialog.findKey.value           = gFindInst.searchString ? gFindInst.searchString : findService.searchString;
   dialog.caseSensitive.checked   = gFindInst.matchCase ? gFindInst.matchCase : findService.matchCase;
   dialog.wrap.checked            = gFindInst.wrapFind ? gFindInst.wrapFind : findService.wrapFind;
   var findBackwards              = gFindInst.findBackwards ? gFindInst.findBackwards : findService.findBackwards;
   if (findBackwards)
     dialog.rg.selectedItem = dialog.up;
@@ -64,25 +64,25 @@ function saveFindData()
   findService.findBackwards = dialog.up.selected;
 }
 
 function onLoad()
 {
   initDialogObject();
 
   // get the find instance
-  var arg0 = window.arguments[0];                                               
+  var arg0 = window.arguments[0];
   // If the dialog was opened from window.find(),
   // arg0 will be an instance of nsIWebBrowserFind
   if (arg0 instanceof Components.interfaces.nsIWebBrowserFind) {
     gFindInst = arg0;
-  } else {  
-    gFindInstData = arg0;                                                       
-    gFindInst = gFindInstData.webBrowserFind;                                   
-  }                                                                             
+  } else {
+    gFindInstData = arg0;
+    gFindInst = gFindInstData.webBrowserFind;
+  }
 
   fillDialog();
   doEnabling();
 
   if (dialog.findKey.value)
     dialog.findKey.select();
   dialog.findKey.focus();
 }
@@ -90,42 +90,42 @@ function onLoad()
 function onUnload()
 {
   window.opener.findDialog = 0;
 }
 
 function onAccept()
 {
   if (gFindInstData && gFindInst != gFindInstData.webBrowserFind) {
-    gFindInstData.init();             
+    gFindInstData.init();
     gFindInst = gFindInstData.webBrowserFind;
   }
 
   // Transfer dialog contents to the find service.
   saveFindData();
   updateFormHistory();
 
   // set up the find instance
   gFindInst.searchString  = dialog.findKey.value;
   gFindInst.matchCase     = dialog.caseSensitive.checked;
   gFindInst.wrapFind      = dialog.wrap.checked;
   gFindInst.findBackwards = dialog.up.selected;
-  
+
   // Search.
   var result = gFindInst.findNext();
 
   if (!result)
   {
     if (!dialog.bundle)
       dialog.bundle = document.getElementById("findBundle");
     Services.prompt.alert(window, dialog.bundle.getString("notFoundTitle"),
                                   dialog.bundle.getString("notFoundWarning"));
     dialog.findKey.select();
     dialog.findKey.focus();
-  } 
+  }
   return false;
 }
 
 function doEnabling()
 {
   dialog.find.disabled = !dialog.findKey.value;
 }
 
--- a/toolkit/content/globalOverlay.js
+++ b/toolkit/content/globalOverlay.js
@@ -39,23 +39,23 @@ function closeWindow(aClose, aPromptFunc
   return true;
 }
 
 function canQuitApplication(aData)
 {
   var os = Components.classes["@mozilla.org/observer-service;1"]
                      .getService(Components.interfaces.nsIObserverService);
   if (!os) return true;
-  
+
   try {
     var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"]
                               .createInstance(Components.interfaces.nsISupportsPRBool);
     os.notifyObservers(cancelQuit, "quit-application-requested", aData || null);
-    
-    // Something aborted the quit process. 
+
+    // Something aborted the quit process.
     if (cancelQuit.data)
       return false;
   }
   catch (ex) { }
   return true;
 }
 
 function goQuitApplication()
--- a/toolkit/content/nsDragAndDrop.js
+++ b/toolkit/content/nsDragAndDrop.js
@@ -10,63 +10,63 @@
 // Do not use this file for new code.
 //
 // For documentation about what to use instead, see:
 //   http://developer.mozilla.org/En/DragDrop/Drag_and_Drop
 //
 ////////////////////////////////////////////////////////////////////////
 
 
-/** 
+/**
  *  nsTransferable - a wrapper for nsITransferable that simplifies
  *                   javascript clipboard and drag&drop. for use in
  *                   these situations you should use the nsClipboard
  *                   and nsDragAndDrop wrappers for more convenience
- **/ 
- 
+ **/
+
 var nsTransferable = {
   /**
    * nsITransferable set (TransferData aTransferData) ;
    *
    * Creates a transferable with data for a list of supported types ("flavours")
-   * 
+   *
    * @param TransferData aTransferData
-   *        a javascript object in the format described above 
-   **/ 
+   *        a javascript object in the format described above
+   **/
   set: function (aTransferDataSet)
     {
       var trans = this.createTransferable();
-      for (var i = 0; i < aTransferDataSet.dataList.length; ++i) 
+      for (var i = 0; i < aTransferDataSet.dataList.length; ++i)
         {
           var currData = aTransferDataSet.dataList[i];
           var currFlavour = currData.flavour.contentType;
           trans.addDataFlavor(currFlavour);
           var supports = null; // nsISupports data
           var length = 0;
           if (currData.flavour.dataIIDKey == "nsISupportsString")
             {
               supports = Components.classes["@mozilla.org/supports-string;1"]
                                    .createInstance(Components.interfaces.nsISupportsString);
 
               supports.data = currData.supports;
               length = supports.data.length;
             }
-          else 
+          else
             {
               // non-string data.
               supports = currData.supports;
               length = 0; // kFlavorHasDataProvider
             }
           trans.setTransferData(currFlavour, supports, length * 2);
         }
       return trans;
     },
-  
+
   /**
-   * TransferData/TransferDataSet get (FlavourSet aFlavourSet, 
+   * TransferData/TransferDataSet get (FlavourSet aFlavourSet,
    *                                   Function aRetrievalFunc, Boolean aAnyFlag) ;
    *
    * Retrieves data from the transferable provided in aRetrievalFunc, formatted
    * for more convenient access.
    *
    * @param FlavourSet aFlavourSet
    *        a FlavourSet object that contains a list of supported flavours.
    * @param Function aRetrievalFunc
@@ -74,110 +74,110 @@ var nsTransferable = {
    *        for each item from the specified source (clipboard/drag&drop etc)
    * @param Boolean aAnyFlag
    *        a flag specifying whether or not a specific flavour is requested. If false,
    *        data of the type of the first flavour in the flavourlist parameter is returned,
    *        otherwise the best flavour supported will be returned.
    **/
   get: function (aFlavourSet, aRetrievalFunc, aAnyFlag)
     {
-      if (!aRetrievalFunc) 
+      if (!aRetrievalFunc)
         throw "No data retrieval handler provided!";
-      
+
       var supportsArray = aRetrievalFunc(aFlavourSet);
       var dataArray = [];
       var count = supportsArray.Count();
-      
+
       // Iterate over the number of items returned from aRetrievalFunc. For
       // clipboard operations, this is 1, for drag and drop (where multiple
       // items may have been dragged) this could be >1.
       for (var i = 0; i < count; i++)
         {
           var trans = supportsArray.GetElementAt(i);
           if (!trans) continue;
           trans = trans.QueryInterface(Components.interfaces.nsITransferable);
-            
+
           var data = { };
           var length = { };
-          
+
           var currData = null;
           if (aAnyFlag)
-            { 
+            {
               var flavour = { };
               trans.getAnyTransferData(flavour, data, length);
               if (data && flavour)
                 {
                   var selectedFlavour = aFlavourSet.flavourTable[flavour.value];
-                  if (selectedFlavour) 
+                  if (selectedFlavour)
                     dataArray[i] = FlavourToXfer(data.value, length.value, selectedFlavour);
                 }
             }
           else
             {
               var firstFlavour = aFlavourSet.flavours[0];
               trans.getTransferData(firstFlavour, data, length);
               if (data && firstFlavour)
                 dataArray[i] = FlavourToXfer(data.value, length.value, firstFlavour);
             }
         }
       return new TransferDataSet(dataArray);
     },
 
-  /** 
+  /**
    * nsITransferable createTransferable (void) ;
    *
    * Creates and returns a transferable object.
-   **/    
+   **/
   createTransferable: function ()
     {
       const kXferableContractID = "@mozilla.org/widget/transferable;1";
       const kXferableIID = Components.interfaces.nsITransferable;
       var trans = Components.classes[kXferableContractID].createInstance(kXferableIID);
       trans.init(null);
       return trans;
     }
-};  
+};
 
-/** 
+/**
  * A FlavourSet is a simple type that represents a collection of Flavour objects.
  * FlavourSet is constructed from an array of Flavours, and stores this list as
  * an array and a hashtable. The rationale for the dual storage is as follows:
- * 
- * Array: Ordering is important when adding data flavours to a transferable. 
- *        Flavours added first are deemed to be 'preferred' by the client. 
+ *
+ * Array: Ordering is important when adding data flavours to a transferable.
+ *        Flavours added first are deemed to be 'preferred' by the client.
  * Hash:  Convenient lookup of flavour data using the content type (MIME type)
- *        of data as a key. 
+ *        of data as a key.
  */
 function FlavourSet(aFlavourList)
 {
   this.flavours = aFlavourList || [];
   this.flavourTable = { };
 
   this._XferID = "FlavourSet";
-  
+
   for (var i = 0; i < this.flavours.length; ++i)
     this.flavourTable[this.flavours[i].contentType] = this.flavours[i];
 }
 
 FlavourSet.prototype = {
   appendFlavour: function (aFlavour, aFlavourIIDKey)
   {
     var flavour = new Flavour (aFlavour, aFlavourIIDKey);
     this.flavours.push(flavour);
     this.flavourTable[flavour.contentType] = flavour;
   }
 };
 
-/** 
- * A Flavour is a simple type that represents a data type that can be handled. 
+/**
+ * A Flavour is a simple type that represents a data type that can be handled.
  * It takes a content type (MIME type) which is used when storing data on the
  * system clipboard/drag and drop, and an IIDKey (string interface name
  * which is used to QI data to an appropriate form. The default interface is
  * assumed to be wide-string.
- */ 
+ */
 function Flavour(aContentType, aDataIIDKey)
 {
   this.contentType = aContentType;
   this.dataIIDKey = aDataIIDKey || "nsISupportsString";
 
   this._XferID = "Flavour";
 }
 
@@ -189,86 +189,86 @@ TransferDataBase.prototype = {
   },
 
   get first ()
   {
     return "dataList" in this && this.dataList.length ? this.dataList[0] : null;
   }
 };
 
-/** 
+/**
  * TransferDataSet is a list (array) of TransferData objects, which represents
- * data dragged from one or more elements. 
+ * data dragged from one or more elements.
  */
 function TransferDataSet(aTransferDataList)
 {
   this.dataList = aTransferDataList || [];
 
   this._XferID = "TransferDataSet";
 }
 TransferDataSet.prototype = TransferDataBase.prototype;
 
-/** 
+/**
  * TransferData is a list (array) of FlavourData for all the applicable content
- * types associated with a drag from a single item. 
+ * types associated with a drag from a single item.
  */
 function TransferData(aFlavourDataList)
 {
   this.dataList = aFlavourDataList || [];
 
   this._XferID = "TransferData";
 }
 TransferData.prototype = {
   __proto__: TransferDataBase.prototype,
-  
+
   addDataForFlavour: function (aFlavourString, aData, aLength, aDataIIDKey)
   {
-    this.dataList.push(new FlavourData(aData, aLength, 
+    this.dataList.push(new FlavourData(aData, aLength,
                        new Flavour(aFlavourString, aDataIIDKey)));
   }
 };
 
-/** 
- * FlavourData is a type that represents data retrieved from the system 
+/**
+ * FlavourData is a type that represents data retrieved from the system
  * clipboard or drag and drop. It is constructed internally by the Transferable
  * using the raw (nsISupports) data from the clipboard, the length of the data,
  * and an object of type Flavour representing the type. Clients implementing
  * IDragDropObserver receive an object of this type in their implementation of
- * onDrop. They access the 'data' property to retrieve data, which is either data 
- * QI'ed to a usable form, or unicode string. 
+ * onDrop. They access the 'data' property to retrieve data, which is either data
+ * QI'ed to a usable form, or unicode string.
  */
-function FlavourData(aData, aLength, aFlavour) 
+function FlavourData(aData, aLength, aFlavour)
 {
   this.supports = aData;
   this.contentLength = aLength;
   this.flavour = aFlavour || null;
-  
+
   this._XferID = "FlavourData";
 }
 
 FlavourData.prototype = {
   get data ()
   {
     if (this.flavour &&
         this.flavour.dataIIDKey != "nsISupportsString")
-      return this.supports.QueryInterface(Components.interfaces[this.flavour.dataIIDKey]); 
+      return this.supports.QueryInterface(Components.interfaces[this.flavour.dataIIDKey]);
 
     var supports = this.supports;
     if (supports instanceof Components.interfaces.nsISupportsString)
       return supports.data.substring(0, this.contentLength/2);
-     
+
     return supports;
   }
 }
 
-/** 
- * Create a TransferData object with a single FlavourData entry. Used when 
- * unwrapping data of a specific flavour from the drag service. 
+/**
+ * Create a TransferData object with a single FlavourData entry. Used when
+ * unwrapping data of a specific flavour from the drag service.
  */
-function FlavourToXfer(aData, aLength, aFlavour) 
+function FlavourToXfer(aData, aLength, aFlavour)
 {
   return new TransferData([new FlavourData(aData, aLength, aFlavour)]);
 }
 
 var transferUtils = {
 
   retrieveURLFromData: function (aData, flavour)
   {
@@ -281,52 +281,52 @@ var transferUtils = {
         return ((aData instanceof Components.interfaces.nsISupportsString) ? aData.toString() : aData).split("\n")[0];
       case "application/x-moz-file":
         var ioService = Components.classes["@mozilla.org/network/io-service;1"]
                                   .getService(Components.interfaces.nsIIOService);
         var fileHandler = ioService.getProtocolHandler("file")
                                    .QueryInterface(Components.interfaces.nsIFileProtocolHandler);
         return fileHandler.getURLSpecFromFile(aData);
     }
-    return null;                                                   
+    return null;
   }
 
 }
 
 /**
  * nsDragAndDrop - a convenience wrapper for nsTransferable, nsITransferable
- *                 and nsIDragService/nsIDragSession. 
+ *                 and nsIDragService/nsIDragSession.
  *
  * Use: map the handler functions to the 'ondraggesture', 'ondragover' and
- *   'ondragdrop' event handlers on your XML element, e.g.                   
- *   <xmlelement ondraggesture="nsDragAndDrop.startDrag(event, observer);"   
- *               ondragover="nsDragAndDrop.dragOver(event, observer);"      
- *               ondragdrop="nsDragAndDrop.drop(event, observer);"/>         
- *                                                                           
- *   You need to create an observer js object with the following member      
- *   functions:                                                              
- *     Object onDragStart (event)        // called when drag initiated,      
- *                                       // returns flavour list with data   
- *                                       // to stuff into transferable      
- *     void onDragOver (Object flavour)  // called when element is dragged   
- *                                       // over, so that it can perform     
+ *   'ondragdrop' event handlers on your XML element, e.g.
+ *   <xmlelement ondraggesture="nsDragAndDrop.startDrag(event, observer);"
+ *               ondragover="nsDragAndDrop.dragOver(event, observer);"
+ *               ondragdrop="nsDragAndDrop.drop(event, observer);"/>
+ *
+ *   You need to create an observer js object with the following member
+ *   functions:
+ *     Object onDragStart (event)        // called when drag initiated,
+ *                                       // returns flavour list with data
+ *                                       // to stuff into transferable
+ *     void onDragOver (Object flavour)  // called when element is dragged
+ *                                       // over, so that it can perform
  *                                       // any drag-over feedback for provided
- *                                       // flavour                          
- *     void onDrop (Object data)         // formatted data object dropped.   
- *     Object getSupportedFlavours ()    // returns a flavour list so that   
+ *                                       // flavour
+ *     void onDrop (Object data)         // formatted data object dropped.
+ *     Object getSupportedFlavours ()    // returns a flavour list so that
  *                                       // nsTransferable can determine
- *                                       // whether or not to accept drop. 
- **/   
+ *                                       // whether or not to accept drop.
+ **/
 
 var nsDragAndDrop = {
-  
+
   _mDS: null,
   get mDragService()
     {
-      if (!this._mDS) 
+      if (!this._mDS)
         {
           const kDSContractID = "@mozilla.org/widget/dragservice;1";
           const kDSIID = Components.interfaces.nsIDragService;
           this._mDS = Components.classes[kDSContractID].getService(kDSIID);
         }
       return this._mDS;
     },
 
@@ -335,118 +335,118 @@ var nsDragAndDrop = {
    *
    * called when a drag on an element is started.
    *
    * @param DOMEvent aEvent
    *        the DOM event fired by the drag init
    * @param Object aDragDropObserver
    *        javascript object of format described above that specifies
    *        the way in which the element responds to drag events.
-   **/  
+   **/
   startDrag: function (aEvent, aDragDropObserver)
     {
       if (!("onDragStart" in aDragDropObserver))
         return;
 
       const kDSIID = Components.interfaces.nsIDragService;
       var dragAction = { action: kDSIID.DRAGDROP_ACTION_COPY + kDSIID.DRAGDROP_ACTION_MOVE + kDSIID.DRAGDROP_ACTION_LINK };
 
       var transferData = { data: null };
-      try 
+      try
         {
           aDragDropObserver.onDragStart(aEvent, transferData, dragAction);
         }
-      catch (e) 
+      catch (e)
         {
           return;  // not a draggable item, bail!
         }
 
       if (!transferData.data) return;
       transferData = transferData.data;
 
       var dt = aEvent.dataTransfer;
       var count = 0;
       do {
-        var tds = transferData._XferID == "TransferData" 
-                                         ? transferData 
+        var tds = transferData._XferID == "TransferData"
+                                         ? transferData
                                          : transferData.dataList[count]
-        for (var i = 0; i < tds.dataList.length; ++i) 
+        for (var i = 0; i < tds.dataList.length; ++i)
         {
           var currData = tds.dataList[i];
           var currFlavour = currData.flavour.contentType;
           var value = currData.supports;
           if (value instanceof Components.interfaces.nsISupportsString)
             value = value.toString();
           dt.mozSetDataAt(currFlavour, value, count);
         }
 
         count++;
       }
-      while (transferData._XferID == "TransferDataSet" && 
+      while (transferData._XferID == "TransferDataSet" &&
              count < transferData.dataList.length);
 
       dt.effectAllowed = "all";
       // a drag targeted at a tree should instead use the treechildren so that
       // the current selection is used as the drag feedback
       dt.addElement(aEvent.originalTarget.localName == "treechildren" ?
                     aEvent.originalTarget : aEvent.target);
       aEvent.stopPropagation();
     },
 
-  /** 
+  /**
    * void dragOver (DOMEvent aEvent, Object aDragDropObserver) ;
    *
    * called when a drag passes over this element
    *
    * @param DOMEvent aEvent
    *        the DOM event fired by passing over the element
    * @param Object aDragDropObserver
    *        javascript object of format described above that specifies
    *        the way in which the element responds to drag events.
    **/
   dragOver: function (aEvent, aDragDropObserver)
-    { 
-      if (!("onDragOver" in aDragDropObserver)) 
+    {
+      if (!("onDragOver" in aDragDropObserver))
         return;
       if (!this.checkCanDrop(aEvent, aDragDropObserver))
         return;
       var flavourSet = aDragDropObserver.getSupportedFlavours();
       for (var flavour in flavourSet.flavourTable)
         {
           if (this.mDragSession.isDataFlavorSupported(flavour))
             {
-              aDragDropObserver.onDragOver(aEvent, 
-                                           flavourSet.flavourTable[flavour], 
+              aDragDropObserver.onDragOver(aEvent,
+                                           flavourSet.flavourTable[flavour],
                                            this.mDragSession);
               aEvent.stopPropagation();
               aEvent.preventDefault();
               break;
             }
         }
     },
 
   mDragSession: null,
 
-  /** 
+  /**
    * void drop (DOMEvent aEvent, Object aDragDropObserver) ;
    *
    * called when the user drops on the element
    *
    * @param DOMEvent aEvent
    *        the DOM event fired by the drop
    * @param Object aDragDropObserver
    *        javascript object of format described above that specifies
    *        the way in which the element responds to drag events.
    **/
   drop: function (aEvent, aDragDropObserver)
     {
       if (!("onDrop" in aDragDropObserver))
         return;
       if (!this.checkCanDrop(aEvent, aDragDropObserver))
-        return;  
+        return;
 
       var flavourSet = aDragDropObserver.getSupportedFlavours();
 
       var dt = aEvent.dataTransfer;
       var dataArray = [];
       var count = dt.mozItemCount;
       for (var i = 0; i < count; ++i) {
         var types = dt.mozTypesAt(i);
@@ -473,71 +473,71 @@ var nsDragAndDrop = {
 
       // hand over to the client to respond to dropped data
       var multiple = "canHandleMultipleItems" in aDragDropObserver && aDragDropObserver.canHandleMultipleItems;
       var dropData = multiple ? transferData : transferData.first.first;
       aDragDropObserver.onDrop(aEvent, dropData, this.mDragSession);
       aEvent.stopPropagation();
     },
 
-  /** 
+  /**
    * void dragExit (DOMEvent aEvent, Object aDragDropObserver) ;
    *
    * called when a drag leaves this element
    *
    * @param DOMEvent aEvent
    *        the DOM event fired by leaving the element
    * @param Object aDragDropObserver
    *        javascript object of format described above that specifies
    *        the way in which the element responds to drag events.
    **/
   dragExit: function (aEvent, aDragDropObserver)
     {
       if (!this.checkCanDrop(aEvent, aDragDropObserver))
         return;
       if ("onDragExit" in aDragDropObserver)
         aDragDropObserver.onDragExit(aEvent, this.mDragSession);
-    },  
-    
-  /** 
+    },
+
+  /**
    * void dragEnter (DOMEvent aEvent, Object aDragDropObserver) ;
    *
    * called when a drag enters in this element
    *
    * @param DOMEvent aEvent
    *        the DOM event fired by entering in the element
    * @param Object aDragDropObserver
    *        javascript object of format described above that specifies
    *        the way in which the element responds to drag events.
    **/
   dragEnter: function (aEvent, aDragDropObserver)
     {
       if (!this.checkCanDrop(aEvent, aDragDropObserver))
         return;
       if ("onDragEnter" in aDragDropObserver)
         aDragDropObserver.onDragEnter(aEvent, this.mDragSession);
-    },  
+    },
 
-  /** 
+  /**
    * Boolean checkCanDrop (DOMEvent aEvent, Object aDragDropObserver) ;
    *
    * Sets the canDrop attribute for the drag session.
    * returns false if there is no current drag session.
    *
    * @param DOMEvent aEvent
    *        the DOM event fired by the drop
    * @param Object aDragDropObserver
    *        javascript object of format described above that specifies
    *        the way in which the element responds to drag events.
    **/
   checkCanDrop: function (aEvent, aDragDropObserver)
     {
-      if (!this.mDragSession) 
+      if (!this.mDragSession)
         this.mDragSession = this.mDragService.getCurrentSession();
-      if (!this.mDragSession) 
+      if (!this.mDragSession)
         return false;
       this.mDragSession.canDrop = this.mDragSession.sourceNode != aEvent.target;
       if ("canDrop" in aDragDropObserver)
         this.mDragSession.canDrop &= aDragDropObserver.canDrop(aEvent, this.mDragSession);
       return true;
     },
 
   /**
--- a/toolkit/content/tests/browser/browser_bug295977_autoscroll_overflow.js
+++ b/toolkit/content/tests/browser/browser_bug295977_autoscroll_overflow.js
@@ -92,17 +92,17 @@ add_task(function* ()
 
     let prefsChanged = (test.middlemousepastepref == false || test.middlemousepastepref == true);
     if (prefsChanged) {
       yield pushPref("middlemouse.paste", test.middlemousepastepref);
     }
 
     yield BrowserTestUtils.synthesizeMouse("#" + test.elem, 50, 80, { button: 1 },
                                            gBrowser.selectedBrowser);
- 
+
     // This ensures bug 605127 is fixed: pagehide in an unrelated document
     // should not cancel the autoscroll.
     yield ContentTask.spawn(gBrowser.selectedBrowser, { }, function* () {
       var iframe = content.document.getElementById("iframe");
 
       if (iframe) {
         var e = new iframe.contentWindow.PageTransitionEvent("pagehide",
                                                              { bubbles: true,
@@ -163,17 +163,17 @@ add_task(function* ()
       function* (args) {
         let msg = "";
         if (args.checkWindow) {
           if (!((args.scrollVert && content.scrollY > 0) ||
                 (!args.scrollVert && content.scrollY == 0))) {
             msg += "Failed: ";
           }
           msg += 'Window for ' + args.elemid + ' should' + (args.scrollVert ? '' : ' not') + ' have scrolled vertically\n';
-         
+
           if (!((args.scrollHori && content.scrollX > 0) ||
                 (!args.scrollHori && content.scrollX == 0))) {
             msg += "Failed: ";
           }
           msg += ' Window for ' + args.elemid + ' should' + (args.scrollHori ? '' : ' not') + ' have scrolled horizontally\n';
         } else {
           let elem = content.document.getElementById(args.elemid);
           if (!((args.scrollVert && elem.scrollTop > 0) ||
--- a/toolkit/content/tests/browser/browser_bug982298.js
+++ b/toolkit/content/tests/browser/browser_bug982298.js
@@ -14,17 +14,17 @@ const scrollTest =
   "var textarea = content.document.getElementById(\"textarea1\");" +
   "textarea.scrollTop = textarea.scrollHeight;" +
   "sendAsyncMessage(\"ScrollDone\", { });"
 
 function test()
 {
   waitForExplicitFinish();
 
-  tab = gBrowser.addTab("data:text/html;base64," + 
+  tab = gBrowser.addTab("data:text/html;base64," +
                         btoa(scrollHtml));
   browser = gBrowser.getBrowserForTab(tab);
   gBrowser.selectedTab = tab;
 
   browser.addEventListener("load", find, true);
 }
 
 function find()
--- a/toolkit/content/tests/browser/browser_f7_caret_browsing.js
+++ b/toolkit/content/tests/browser/browser_f7_caret_browsing.js
@@ -260,17 +260,17 @@ add_task(function* toggleCheckboxWantCar
   ok(Services.prefs.getBoolPref(kPrefCaretBrowsingOn), "Caret browsing should now be on.");
   ok(Services.prefs.getBoolPref(kPrefShortcutEnabled), "Shortcut should still be enabled.");
   ok(!Services.prefs.getBoolPref(kPrefWarnOnEnable), "Should no longer warn when enabling.");
 
 
   syncToggleCaretNoDialog(false);
   syncToggleCaretNoDialog(true);
   syncToggleCaretNoDialog(false);
-  
+
   Services.prefs.setBoolPref(kPrefShortcutEnabled, true);
   Services.prefs.setBoolPref(kPrefWarnOnEnable, true);
   Services.prefs.setBoolPref(kPrefCaretBrowsingOn, false);
 
   gBrowser.removeTab(gTab);
   gTab = null;
 });
 
--- a/toolkit/content/tests/chrome/RegisterUnregisterChrome.js
+++ b/toolkit/content/tests/chrome/RegisterUnregisterChrome.js
@@ -53,17 +53,17 @@ function getParent(path) {
   return path.substring(0, lastSlash);
 }
 
 function copyDirToTempProfile(path, subdirname) {
 
   if (subdirname === undefined) {
     subdirname = "mochikit-tmp";
   }
-  
+
   let tmpdir = gDirSvc.get("ProfD", Ci.nsIFile);
   tmpdir.append(subdirname);
   tmpdir.createUnique(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0777);
 
   let rootDir = getParent(path);
   if (rootDir == "") {
     return tmpdir;
   }
@@ -93,17 +93,17 @@ function chromeURIToFile(chromeURI)
     if (parts[parts.length - 1] != '') {
       tmpDir.append(parts[parts.length - 1]);
     }
     return tmpDir;
   }
 
   return convertChromeURI(chromeURI).
     QueryInterface(Ci.nsIFileURL).file;
-}  
+}
 
 // Register a chrome manifest temporarily and return a function which un-does
 // the registrarion when no longer needed.
 function createManifestTemporarily(tempDir, manifestText)
 {
   gPrefs.setBoolPref(XUL_CACHE_PREF, true);
 
   tempDir.append("temp.manifest");
@@ -149,13 +149,13 @@ function registerManifestTemporarily(man
     gChromeReg.refreshSkins();
     gPrefs.clearUserPref(XUL_CACHE_PREF);
   }
 }
 
 function registerManifestPermanently(manifestURI)
 {
   var chromepath = chromeURIToFile(manifestURI);
-  
+
   Components.manager.QueryInterface(Ci.nsIComponentRegistrar).
     autoRegister(chromepath);
   return chromepath;
 }
--- a/toolkit/content/tests/chrome/popup_trigger.js
+++ b/toolkit/content/tests/chrome/popup_trigger.js
@@ -490,17 +490,17 @@ var popupTests = [
     gExpectedTriggerNode = null;
     is(gMenuPopup.anchorNode, null, testname + " anchorNode");
     is(gMenuPopup.triggerNode, gCachedEvent.target, testname + " triggerNode");
     is(document.popupNode, gCachedEvent.target, testname + " document.popupNode");
 
     var childframe = document.getElementById("childframe");
     if (childframe) {
       for (var t = 0; t < 2; t++) {
-        var child = childframe.contentDocument; 
+        var child = childframe.contentDocument;
         var evt = child.createEvent("Event");
         evt.initEvent("click", true, true);
         child.documentElement.dispatchEvent(evt);
         is(child.documentElement.getAttribute("data"), "xnull",
            "cannot get popupNode from other document");
         child.documentElement.setAttribute("data", "none");
         // now try again with document.popupNode set explicitly
         document.popupNode = gCachedEvent.target;
--- a/toolkit/content/tests/chrome/xul_selectcontrol.js
+++ b/toolkit/content/tests/chrome/xul_selectcontrol.js
@@ -278,17 +278,17 @@ function test_nsIDOMXULSelectControlElem
   var seconditem = element.appendItem("Second Item", "second");
 
   // 'mouse select' - check if clicking an item selects it
   synthesizeMouseExpectEvent(firstitem, 2, 2, {}, element, "select", testid + "mouse select");
   test_nsIDOMXULSelectControlElement_States(element, testid + "mouse select", 2, firstitem, 0, "first");
 
   synthesizeMouseExpectEvent(seconditem, 2, 2, {}, element, "select", testid + "mouse select 2");
   test_nsIDOMXULSelectControlElement_States(element, testid + "mouse select 2", 2, seconditem, 1, "second");
- 
+
   // make sure the element is focused so keyboard navigation will apply
   element.selectedIndex = 1;
   element.focus();
 
   var navLeftRight = behaviourContains(element.localName, "keynav-leftright");
   var backKey = navLeftRight ? "VK_LEFT" : "VK_UP";
   var forwardKey = navLeftRight ? "VK_RIGHT" : "VK_DOWN";
 
@@ -340,17 +340,17 @@ function test_nsIDOMXULSelectControlElem
 
     element.removeItemAt(5);
     element.removeItemAt(4);
   }
 
   // now test whether a disabled item works.
   element.selectedIndex = 0;
   seconditem.disabled = true;
-  
+
   var dontSelectDisabled = (behaviourContains(element.localName, "dont-select-disabled"));
 
   // 'mouse select' - check if clicking an item selects it
   synthesizeMouseExpectEvent(seconditem, 2, 2, {}, element,
                              dontSelectDisabled ? "!select" : "select",
                              testid + "mouse select disabled");
   test_nsIDOMXULSelectControlElement_States(element, testid + "mouse select disabled", 4,
     dontSelectDisabled ? firstitem: seconditem, dontSelectDisabled ? 0 : 1,
--- a/toolkit/content/tests/unit/test_contentAreaUtils.js
+++ b/toolkit/content/tests/unit/test_contentAreaUtils.js
@@ -39,17 +39,17 @@ function test_urlSecurityCheck() {
     do_throw("urlSecurityCheck failed to handle the http URI as a string (uri spec)");
   }
 
   let shouldThrow = true;
   try {
     urlSecurityCheck(CHROME_URI, nullPrincipal,
                      DISALLOW_INHERIT_PRINCIPAL);
   }
-  catch(ex) { 
+  catch(ex) {
     shouldThrow = false;
   }
   if (shouldThrow)
     do_throw("urlSecurityCheck should throw when linking to a chrome uri with a null principal");
 }
 
 function test_stringBundle() {
   // This test verifies that the elements that can be used as file picker title
--- a/toolkit/content/tests/widgets/popup_shared.js
+++ b/toolkit/content/tests/widgets/popup_shared.js
@@ -181,17 +181,17 @@ function checkResult()
   if ("result" in test)
     test.result(test.testname, step);
 
   if ("autohide" in test) {
     gAutoHide = true;
     document.getElementById(test.autohide).hidePopup();
     return;
   }
-  
+
   goNextStep();
 }
 
 function goNextStep()
 {
   gTestEventIndex = 0;
 
   var step = null;
--- a/toolkit/content/tests/widgets/tree_shared.js
+++ b/toolkit/content/tests/widgets/tree_shared.js
@@ -38,17 +38,17 @@ function testtag_tree(treeid, treerowinf
   else
     rowInfo = convertDOMtoTreeRowInfo(treerowinfo, 0, { value: -1 });
   var columnInfo = (columnstype == "simple") ? columns_simpletree : columns_hiertree;
 
   is(tree.view.selection.currentColumn, null, testid + " initial currentColumn");
   is(tree.selType, seltype == "multiple" ? "" : seltype, testid + " seltype");
 
   // note: the functions below should be in this order due to changes made in later tests
-  
+
   // select the first column in cell selection mode so that the selection
   // functions can be tested
   if (seltype == "cell")
     tree.view.selection.currentColumn = tree.columns[0];
 
   testtag_tree_columns(tree, columnInfo, testid);
   testtag_tree_TreeSelection(tree, testid, multiple);
   testtag_tree_TreeSelection_UI(tree, testid, multiple);
@@ -69,18 +69,18 @@ function testtag_tree(treeid, treerowinf
   // currently, the editable flag means that tree editing cannot be invoked
   // by the user. However, editing can still be started with a script.
   is(tree.editingRow, -1, testid + " initial editingRow (continued)");
   is(tree.editingColumn, null, testid + " initial editingColumn (continued)");
 
   var ecolumn = tree.columns[0];
   ok(!tree.startEditing(1, ecolumn), "non-editable trees shouldn't start editing");
   is(tree.editingRow, -1, testid + " failed startEditing shouldn't set editingRow");
-  is(tree.editingColumn, null, testid + " failed startEditing shouldn't set editingColumn");  
-  
+  is(tree.editingColumn, null, testid + " failed startEditing shouldn't set editingColumn");
+
   tree.editable = true;
 
   ok(tree.startEditing(1, ecolumn), "startEditing should have returned true");
   is(tree.editingRow, 1, testid + " startEditing editingRow");
   is(tree.editingColumn, ecolumn, testid + " startEditing editingColumn");
   is(tree.getAttribute("editing"), "true", testid + " startEditing editing attribute");
 
   tree.stopEditing(true);
@@ -367,17 +367,17 @@ function testtag_tree_TreeSelection_UI(t
   selection.select(4);
   synthesizeKeyExpectEvent("VK_UP", {}, tree, "!select", "key up with scroll");
   is(tree.treeBoxObject.getFirstVisibleRow(), 3, testid + "key up with scroll");
 
   tree.treeBoxObject.scrollToRow(0);
   selection.select(3);
   synthesizeKeyExpectEvent("VK_DOWN", {}, tree, "!select", "key down with scroll");
   is(tree.treeBoxObject.getFirstVisibleRow(), 1, testid + "key down with scroll");
-  
+
   // accel key and cursor movement adjust currentIndex but should not change
   // the selection. In single selection mode, the selection will not change,
   // but instead will just scroll up or down a line
   tree.treeBoxObject.scrollToRow(0);
   selection.select(1);
   synthesizeKeyExpectEvent("VK_DOWN", { accelKey: true }, tree, "!select", "key down with accel");
   testtag_tree_TreeSelection_State(tree, testid + "key down with accel", multiple ? 2 : 1, [1]);
   if (!multiple)
@@ -717,17 +717,17 @@ function testtag_tree_TreeSelection_UI_c
   selection.select(2);
   selection.currentIndex = 2;
   if (0) { // XXXndeakin disable these tests for now
     mouseOnCell(tree, 1, secondlastcolumn, "mouse on cell");
     testtag_tree_TreeSelection_State(tree, testid + "mouse on cell", 1, [1], null, secondlastcolumn);
   }
 
   tree.focus();
- 
+
   // selection is set, so it should move when the left and right cursor keys are pressed
   tree.treeBoxObject.scrollToRow(0);
   selection.select(1);
   selection.currentIndex = 1;
   selection.currentColumn = secondcolumn;
   synthesizeKeyExpectEvent("VK_LEFT", {}, tree, "!select", "key left in second column");
   testtag_tree_TreeSelection_State(tree, testid + "key left in second column", 1, [1], 0, firstcolumn);
 
--- a/toolkit/content/widgets/button.xml
+++ b/toolkit/content/widgets/button.xml
@@ -48,35 +48,35 @@
             for (var i = 0; i < sibs.length; ++i)
               sibs[i].removeAttribute("checked");
           }
 
           if (val)
             this.setAttribute("checked", "true");
           else
             this.removeAttribute("checked");
-          
+
           return val;
         ]]></setter>
       </property>
-      
+
       <property name="checkState">
         <getter><![CDATA[
           var state = this.getAttribute("checkState");
           if (state == "")
             return this.checked ? 1 : 0;
           else
             return state == "0" ? 0 : (state == "2" ? 2 : 1);
         ]]></getter>
         <setter><![CDATA[
           this.setAttribute("checkState", val);
           return val;
         ]]></setter>
       </property>
-      
+
       <property name="autoCheck"
                 onget="return this.getAttribute('autoCheck') == 'true';"
                 onset="this.setAttribute('autoCheck', val); return val;"/>
 
       <method name ="filterButtons">
         <parameter name="node"/>
         <body>
         <![CDATA[
@@ -97,22 +97,22 @@
         </body>
       </method>
 
       <method name="fireAccessKeyButton">
         <parameter name="aSubtree"/>
         <parameter name="aAccessKeyLower"/>
         <body>
         <![CDATA[
-          var iterator = aSubtree.ownerDocument.createTreeWalker(aSubtree, 
-                                                                 NodeFilter.SHOW_ELEMENT, 
+          var iterator = aSubtree.ownerDocument.createTreeWalker(aSubtree,
+                                                                 NodeFilter.SHOW_ELEMENT,
                                                                  this.filterButtons);
           while (iterator.nextNode()) {
             var test = iterator.currentNode;
-            if (test.accessKey.toLowerCase() == aAccessKeyLower && 
+            if (test.accessKey.toLowerCase() == aAccessKeyLower &&
                 !test.disabled && !test.collapsed && !test.hidden) {
               test.focus();
               test.click();
               return true;
             }
           }
           return false;
         ]]>
@@ -170,33 +170,33 @@
                 document.defaultView.getComputedStyle(this.parentNode, "")
                         .direction == "rtl")) {
             event.preventDefault();
             window.document.commandDispatcher.advanceFocus();
             return;
           }
         }
 
-        if (event.keyCode || event.charCode <= 32 || event.altKey || 
+        if (event.keyCode || event.charCode <= 32 || event.altKey ||
             event.ctrlKey || event.metaKey)
           return;  // No printable char pressed, not a potential accesskey
 
         // Possible accesskey pressed
         var charPressedLower = String.fromCharCode(event.charCode).toLowerCase();
 
         // If the accesskey of the current button is pressed, just activate it
         if (this.accessKey.toLowerCase() == charPressedLower) {
           this.click();
           return;
         }
 
         // Search for accesskey in the list of buttons for this doc and each subdoc
         // Get the buttons for the main document and all sub-frames
         for (var frameCount = -1; frameCount < window.top.frames.length; frameCount++) {
-          var doc = (frameCount == -1)? window.top.document: 
+          var doc = (frameCount == -1)? window.top.document:
             window.top.frames[frameCount].document
           if (this.fireAccessKeyButton(doc.documentElement, charPressedLower))
             return;
         }
 
         // Test anonymous buttons
         var dlg = window.top.document;
         var buttonBox = dlg.getAnonymousElementByAttribute(dlg.documentElement,
@@ -250,78 +250,78 @@
   </binding>
 
   <binding id="menu-button-base"
            extends="chrome://global/content/bindings/button.xml#button-base">
     <implementation implements="nsIDOMEventListener">
       <constructor>
         this.init();
       </constructor>
-      
+
       <method name="init">
         <body>
         <![CDATA[
           var btn = document.getAnonymousElementByAttribute(this, "anonid", "button");
           if (!btn)
             throw "XBL binding for <button type=\"menu-button\"/> binding must contain an element with anonid=\"button\"";
-          
+
           var menubuttonParent = this;
-          btn.addEventListener("mouseover", function() { 
+          btn.addEventListener("mouseover", function() {
             if (!this.disabled)
               menubuttonParent.buttonover = true;
           }, true);
           btn.addEventListener("mouseout", function() {
             menubuttonParent.buttonover = false;
           }, true);
           btn.addEventListener("mousedown", function() {
             if (!this.disabled) {
               menubuttonParent.buttondown = true;
               document.addEventListener("mouseup", menubuttonParent, true);
             }
           }, true);
         ]]>
         </body>
       </method>
-      
+
       <property name="buttonover" onget="return this.getAttribute('buttonover');">
         <setter>
         <![CDATA[
           var v = val || val == "true";
-          if (!v && this.buttondown) { 
+          if (!v && this.buttondown) {
             this.buttondown = false;
             this._pendingActive = true;
-          } 
+          }
           else {
             if (this._pendingActive) {
               this.buttondown = true;
               this._pendingActive = false;
             }
           }
 
           if (v)
             this.setAttribute("buttonover", "true");
           else
             this.removeAttribute("buttonover");
           return val;
         ]]>
         </setter>
       </property>
-      
+
       <property name="buttondown" onget="return this.getAttribute('buttondown') == 'true';">
         <setter>
         <![CDATA[
           if (val || val == "true")
             this.setAttribute("buttondown", "true");
           else
             this.removeAttribute("buttondown");
           return val;
         ]]>
         </setter>
       </property>
-      
+
       <field name="_pendingActive">false</field>
 
       <method name="handleEvent">
         <parameter name="aEvent"/>
         <body>
         <![CDATA[
           this._pendingActive = false;
           this.buttondown = false;
@@ -356,20 +356,20 @@
                   anonid="button" flex="1" allowevents="true"
                   xbl:inherits="disabled,crop,image,label,accesskey,command,
                                 buttonover,buttondown,align,dir,pack,orient">
         <children/>
       </xul:button>
       <xul:dropmarker class="button-menubutton-dropmarker" xbl:inherits="open,disabled,label"/>
     </content>
   </binding>
-  
+
   <binding id="button-image" display="xul:button"
            extends="chrome://global/content/bindings/button.xml#button">
     <content>
       <xul:image class="button-image-icon" xbl:inherits="src=image"/>
     </content>
   </binding>
 
   <binding id="button-repeat" display="xul:autorepeatbutton"
            extends="chrome://global/content/bindings/button.xml#button"/>
-  
+
 </bindings>
--- a/toolkit/content/widgets/colorpicker.xml
+++ b/toolkit/content/widgets/colorpicker.xml
@@ -8,17 +8,17 @@
    xmlns="http://www.mozilla.org/xbl"
    xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
    xmlns:xbl="http://www.mozilla.org/xbl">
 
   <binding id="colorpicker" extends="chrome://global/content/bindings/general.xml#basecontrol">
     <resources>
       <stylesheet src="chrome://global/skin/colorpicker.css"/>
     </resources>
-    
+
     <content>
       <xul:vbox flex="1">
 
         <xul:hbox>
           <xul:image class="colorpickertile cp-light" color="#FFFFFF"/>
           <xul:image class="colorpickertile cp-light" color="#FFCCCC"/>
           <xul:image class="colorpickertile cp-light" color="#FFCC99"/>
           <xul:image class="colorpickertile cp-light" color="#FFFF99"/>
@@ -101,17 +101,17 @@
           <xul:image class="colorpickertile" color="#330099"/>
           <xul:image class="colorpickertile" color="#330033"/>
         </xul:hbox>
       </xul:vbox>
       <!-- Something to take tab focus
       <button style="border : 0px; width: 0px; height: 0px;"/>
       -->
     </content>
-    
+
     <implementation implements="nsIDOMEventListener">
       <property name="color">
         <getter><![CDATA[
           return this.mSelectedCell ? this.mSelectedCell.getAttribute("color") : null;
         ]]></getter>
         <setter><![CDATA[
           if (!val)
             return val;
@@ -205,44 +205,44 @@
           for (let el of imageEls) {
             let dataURI = "data:image/svg+xml,<svg style='background-color: " +
                           encodeURIComponent(el.getAttribute("color")) +
                           "' xmlns='http://www.w3.org/2000/svg' />";
             el.setAttribute("src", dataURI);
           }
 
           this.hoverCell(this.mBox.childNodes[0].childNodes[0]);
-          
+
           // used to capture keydown at the document level
           this.mPickerKeyDown = function(aEvent)
           {
             document._focusedPicker.pickerKeyDown(aEvent);
           }
 
         ]]></body>
       </method>
-      
+
       <method name="_fireEvent">
         <parameter name="aTarget"/>
         <parameter name="aEventName"/>
         <body>
-        <![CDATA[      
+        <![CDATA[
           try {
             var event = document.createEvent("Events");
             event.initEvent(aEventName, true, true);
             var cancel = !aTarget.dispatchEvent(event);
             if (aTarget.hasAttribute("on" + aEventName)) {
               var fn = new Function ("event", aTarget.getAttribute("on" + aEventName));
               var rv = fn.call(aTarget, event);
               if (rv == false)
                 cancel = true;
             }
-            return !cancel;  
+            return !cancel;
           }
-          catch (e) { 
+          catch (e) {
             Components.utils.reportError(e);
           }
           return false;
         ]]>
         </body>
       </method>
 
       <method name="resetHover">
@@ -272,17 +272,17 @@
       </method>
 
       <method name="hoverLeft">
         <body><![CDATA[
           var cell = this.mHoverCell.previousSibling;
           this.hoverCell(cell);
         ]]></body>
       </method>
-      
+
       <method name="hoverRight">
         <body><![CDATA[
           var cell = this.mHoverCell.nextSibling;
           this.hoverCell(cell);
         ]]></body>
       </method>
 
       <method name="hoverUp">
@@ -305,29 +305,29 @@
             this.hoverCell(cell);
           }
         ]]></body>
       </method>
 
       <method name="hoverTo">
         <parameter name="aRow"/>
         <parameter name="aCol"/>
-        
+
         <body><![CDATA[
           var row = this.mBox.childNodes[aRow];
           if (!row) return;
           var cell = row.childNodes[aCol];
           if (!cell) return;
           this.hoverCell(cell);
         ]]></body>
       </method>
 
       <method name="hoverCell">
         <parameter name="aCell"/>
-        
+
         <body><![CDATA[
           if (this.isColorCell(aCell)) {
             this.resetHover();
             aCell.setAttribute("hover", "true");
             this.mHoverCell = aCell;
             var event = document.createEvent('Events');
             event.initEvent('DOMMenuItemActive', true, true);
             aCell.dispatchEvent(event);
@@ -338,17 +338,17 @@
       <method name="selectHoverCell">
         <body><![CDATA[
           this.selectCell(this.mHoverCell);
         ]]></body>
       </method>
 
       <method name="selectCell">
         <parameter name="aCell"/>
-        
+
         <body><![CDATA[
           if (this.isColorCell(aCell)) {
             if (this.mSelectedCell)
               this.mSelectedCell.removeAttribute("selected");
 
             this.mSelectedCell = aCell;
             aCell.setAttribute("selected", "true");
 
@@ -381,23 +381,23 @@
           }
         ]]></body>
       </method>
 
 	  <constructor><![CDATA[
         this.initialize();
       ]]></constructor>
 
-    </implementation>    
-    
+    </implementation>
+
     <handlers>
       <handler event="mouseover"><![CDATA[
         this.hoverCell(event.originalTarget);
       ]]></handler>
-      
+
       <handler event="click"><![CDATA[
         if (event.originalTarget.hasAttribute("color")) {
           this.selectCell(event.originalTarget);
           this.hoverCell(this.mSelectedCell);
         }
       ]]></handler>
 
 
@@ -406,17 +406,17 @@
         if (!mIsPopup && this.getAttribute('focused') != 'true') {
           this.setAttribute('focused','true');
           document.addEventListener("keydown", this, true);
           if (this.mSelectedCell)
             this.hoverCell(this.mSelectedCell);
         }
       ]]>
       </handler>
-    
+
       <handler event="blur" phase="capturing">
       <![CDATA[
         if (!mIsPopup && this.getAttribute('focused') == 'true') {
           document.removeEventListener("keydown", this, true);
           this.removeAttribute('focused');
           this.resetHover();
         }
       ]]>
@@ -424,30 +424,30 @@
     </handlers>
   </binding>
 
   <binding id="colorpicker-button" display="xul:menu" role="xul:colorpicker"
            extends="chrome://global/content/bindings/general.xml#basecontrol">
     <resources>
       <stylesheet src="chrome://global/skin/colorpicker.css"/>
     </resources>
-    
+
     <content>
       <xul:image class="colorpicker-button-colorbox" anonid="colorbox" flex="1" xbl:inherits="disabled"/>
 
       <xul:panel class="colorpicker-button-menupopup"
                  anonid="colorpopup" noautofocus="true" level="top"
                  onmousedown="event.stopPropagation()"
                  onpopupshowing="this._colorPicker.onPopupShowing()"
                  onpopuphiding="this._colorPicker.onPopupHiding()"
                  onselect="this._colorPicker.pickerChange()">
         <xul:colorpicker xbl:inherits="palettename,disabled" allowevents="true" anonid="colorpicker"/>
       </xul:panel>
     </content>
-    
+
     <implementation>
       <property name="open"
                 onget="return this.getAttribute('open') == 'true'"
                 onset="this.showPopup();"/>
       <property name="color">
         <getter><![CDATA[
           return this.getAttribute("color");
         ]]></getter>
@@ -455,101 +455,101 @@
           this.mColorBox.setAttribute("src",
             "data:image/svg+xml,<svg style='background-color: " +
             encodeURIComponent(val) +
             "' xmlns='http://www.w3.org/2000/svg' />");
           this.setAttribute("color", val);
           return val;
         ]]></setter>
       </property>
-      
+
       <method name="initialize">
         <body><![CDATA[
           this.mColorBox = document.getAnonymousElementByAttribute(this, "anonid", "colorbox");
           this.mColorBox.setAttribute("src",
             "data:image/svg+xml,<svg style='background-color: " +
             encodeURIComponent(this.color) +
             "' xmlns='http://www.w3.org/2000/svg' />");
-        
+
           var popup = document.getAnonymousElementByAttribute(this, "anonid", "colorpopup")
           popup._colorPicker = this;
-          
+
           this.mPicker = document.getAnonymousElementByAttribute(this, "anonid", "colorpicker")
         ]]></body>
       </method>
-      
+
       <method name="_fireEvent">
         <parameter name="aTarget"/>
         <parameter name="aEventName"/>
         <body>
-        <![CDATA[      
+        <![CDATA[
           try {
             var event = document.createEvent("Events");
             event.initEvent(aEventName, true, true);
             var cancel = !aTarget.dispatchEvent(event);
             if (aTarget.hasAttribute("on" + aEventName)) {
               var fn = new Function ("event", aTarget.getAttribute("on" + aEventName));
               var rv = fn.call(aTarget, event);
               if (rv == false)
                 cancel = true;
             }
-            return !cancel;  
+            return !cancel;
           }
-          catch (e) { 
+          catch (e) {
             dump(e);
           }
           return false;
         ]]>
         </body>
       </method>
 
       <method name="showPopup">
         <body><![CDATA[
           this.mPicker.parentNode.openPopup(this, "after_start", 0, 0, false, false);
         ]]></body>
       </method>
-      
+
       <method name="hidePopup">
         <body><![CDATA[
           this.mPicker.parentNode.hidePopup();
         ]]></body>
       </method>
 
       <method name="onPopupShowing">
         <body><![CDATA[
           if ("resetHover" in this.mPicker)
             this.mPicker.resetHover();
           document.addEventListener("keydown", this.mPicker, true);
           this.mPicker.mIsPopup = true;
           // Initialize to current button's color
           this.mPicker.initColor(this.color);
         ]]></body>
       </method>
-      
+
       <method name="onPopupHiding">
         <body><![CDATA[
           // Removes the key listener
           document.removeEventListener("keydown", this.mPicker, true);
           this.mPicker.mIsPopup = false;
         ]]></body>
       </method>
 
       <method name="pickerChange">
         <body><![CDATA[
           this.color = this.mPicker.color;
           setTimeout(function(aPopup) { aPopup.hidePopup() }, 1, this.mPicker.parentNode);
-          
+
           this._fireEvent(this, "change");
         ]]></body>
       </method>
 
       <constructor><![CDATA[
         this.initialize();
       ]]></constructor>
-      
+
     </implementation>
 
     <handlers>
       <handler event="keydown"><![CDATA[
         // open popup if key is space/up/left/right/down and popup is closed
         if ( (event.keyCode == 32 || (event.keyCode > 36 && event.keyCode < 41)) && !this.open)
           this.showPopup();
         else if ( (event.keyCode == 27) && this.open)
--- a/toolkit/content/widgets/datetimepicker.xml
+++ b/toolkit/content/widgets/datetimepicker.xml
@@ -458,17 +458,17 @@
       <method name="_constrainValue">
         <parameter name="aField"/>
         <parameter name="aValue"/>
         <parameter name="aNoWrap"/>
         <body>
           <![CDATA[
             // aNoWrap is true when the user entered a value, so just
             // constrain within limits. If false, the value is being
-            // incremented or decremented, so wrap around values 
+            // incremented or decremented, so wrap around values
             var max = (aField == this.hourField) ? 24 : 60;
             if (aValue < 0)
               return aNoWrap ? 0 : max + aValue;
             if (aValue >= max)
               return aNoWrap ? max - 1 : aValue - max;
             return aValue;
           ]]>
         </body>
--- a/toolkit/content/widgets/dialog.xml
+++ b/toolkit/content/widgets/dialog.xml
@@ -3,26 +3,26 @@
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 
 <bindings id="dialogBindings"
           xmlns="http://www.mozilla.org/xbl"
           xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
           xmlns:xbl="http://www.mozilla.org/xbl">
-  
+
   <binding id="dialog" extends="chrome://global/content/bindings/general.xml#root-element">
     <resources>
       <stylesheet src="chrome://global/skin/dialog.css"/>
     </resources>
     <content>
       <xul:vbox class="box-inherit dialog-content-box" flex="1">
         <children/>
       </xul:vbox>
-          
+
       <xul:hbox class="dialog-button-box" anonid="buttons"
                 xbl:inherits="pack=buttonpack,align=buttonalign,dir=buttondir,orient=buttonorient"
 #ifdef XP_UNIX
                 >
         <xul:button dlgtype="disclosure" class="dialog-button" hidden="true"/>
         <xul:button dlgtype="help" class="dialog-button" hidden="true"/>
         <xul:button dlgtype="extra2" class="dialog-button" hidden="true"/>
         <xul:button dlgtype="extra1" class="dialog-button" hidden="true"/>
@@ -72,25 +72,25 @@
 
       <method name="acceptDialog">
         <body>
         <![CDATA[
           return this._doButtonCommand("accept");
         ]]>
         </body>
       </method>
-      
+
       <method name="cancelDialog">
         <body>
         <![CDATA[
           return this._doButtonCommand("cancel");
         ]]>
         </body>
       </method>
-      
+
       <method name="getButton">
         <parameter name="aDlgType"/>
         <body>
         <![CDATA[
           return this._buttons[aDlgType];
         ]]>
         </body>
       </method>
@@ -131,17 +131,17 @@
         </body>
       </method>
 
       <method name="centerWindowOnScreen">
         <body>
         <![CDATA[
           var xOffset = screen.availWidth/2 - window.outerWidth/2;
           var yOffset = screen.availHeight/2 - window.outerHeight/2; //(opener.outerHeight *2)/10;
-  
+
           xOffset = xOffset > 0 ? xOffset : 0;
           yOffset = yOffset > 0 ? yOffset : 0;
           window.moveTo(xOffset, yOffset);
         ]]>
         </body>
       </method>
 
       <constructor>
@@ -203,32 +203,32 @@
                 window.notifyDefaultButtonLoaded(defaultButton);
             } catch (e) { }
           }
 
           // Give focus after onload completes, see bug 103197.
           setTimeout(focusInit, 0);
         ]]>
         </body>
-      </method>                
+      </method>
 
       <property name="mStrBundle">
         <getter>
         <![CDATA[
           if (!this._mStrBundle) {
             // need to create string bundle manually instead of using <xul:stringbundle/>
             // see bug 63370 for details
             this._mStrBundle = Components.classes["@mozilla.org/intl/stringbundle;1"]
                                          .getService(Components.interfaces.nsIStringBundleService)
                                          .createBundle("chrome://global/locale/dialog.properties");
           }
           return this._mStrBundle;
         ]]></getter>
       </property>
-      
+
       <method name="_configureButtons">
         <parameter name="aButtons"/>
         <body>
         <![CDATA[
           // by default, get all the anonymous button elements
           var buttons = {};
           this._buttons = buttons;
           buttons.accept = document.getAnonymousElementByAttribute(this, "dlgtype", "accept");
@@ -290,30 +290,30 @@
                   default:
                     break;
                 }
             }
           }
 
           // ensure that hitting enter triggers the default button command
           this.defaultButton = this.defaultButton;
-          
+
           // if there is a special button configuration, use it
           if (aButtons) {
             // expect a comma delimited list of dlgtype values
             var list = aButtons.split(",");
 
             // mark shown dlgtypes as true
             var shown = { accept: false, cancel: false, help: false,
                           disclosure: false, extra1: false, extra2: false };
             for (i = 0; i < list.length; ++i)
               shown[list[i].replace(/ /g, "")] = true;
 
             // hide/show the buttons we want
-            for (dlgtype in buttons) 
+            for (dlgtype in buttons)
               buttons[dlgtype].hidden = !shown[dlgtype];
 
             let { AppConstants } =
                 Components.utils.import("resource://gre/modules/AppConstants.jsm", {});
             // show the spacer on Windows only when the extra2 button is present
             if (AppConstants.platform == "win") {
               var spacer = document.getAnonymousElementByAttribute(this, "anonid", "spacer");
               spacer.removeAttribute("hidden");
@@ -351,17 +351,17 @@
         <parameter name="aEvent"/>
         <body>
         <![CDATA[
           return document.documentElement._doButtonCommand(
                                         aEvent.target.getAttribute("dlgtype"));
         ]]>
         </body>
       </method>
-      
+
       <method name="_doButtonCommand">
         <parameter name="aDlgType"/>
         <body>
         <![CDATA[
           var button = this.getButton(aDlgType);
           if (!button.disabled) {
             var noCancel = this._fireButtonEvent(aDlgType);
             if (noCancel) {
@@ -375,36 +375,36 @@
               }
             }
             return noCancel;
           }
           return true;
         ]]>
         </body>
       </method>
-      
+
       <method name="_fireButtonEvent">
         <parameter name="aDlgType"/>
         <body>
         <![CDATA[
           var event = document.createEvent("Events");
           event.initEvent("dialog"+aDlgType, true, true);
-          
+
           // handle dom event handlers
           var noCancel = this.dispatchEvent(event);
-          
+
           // handle any xml attribute event handlers
           var handler = this.getAttribute("ondialog"+aDlgType);
           if (handler != "") {
             var fn = new Function("event", handler);
             var returned = fn(event);
             if (returned == false)
               noCancel = false;
           }
-          
+
           return noCancel;
         ]]>
         </body>
       </method>
 
       <method name="_hitEnter">
         <parameter name="evt"/>
         <body>
@@ -415,17 +415,17 @@
           var btn = this.getButton(this.defaultButton);
           if (btn)
             this._doButtonCommand(this.defaultButton);
         ]]>
         </body>
       </method>
 
     </implementation>
-    
+
     <handlers>
       <handler event="keypress" keycode="VK_RETURN"
                group="system" action="this._hitEnter(event);"/>
       <handler event="keypress" keycode="VK_ESCAPE" group="system">
         if (!event.defaultPrevented)
           this.cancelDialog();
       </handler>
 #ifdef XP_MACOSX
--- a/toolkit/content/widgets/filefield.xml
+++ b/toolkit/content/widgets/filefield.xml
@@ -18,40 +18,40 @@
       <xul:hbox class="fileFieldContentBox" align="center" flex="1" xbl:inherits="disabled">
         <xul:image class="fileFieldIcon" xbl:inherits="src=image,disabled"/>
         <xul:textbox class="fileFieldLabel" xbl:inherits="value=label,disabled,accesskey,tabindex,aria-labelledby" flex="1" readonly="true"/>
       </xul:hbox>
     </content>
     <implementation implements="nsIDOMXULLabeledControlElement">
       <property name="label" onget="return this.getAttribute('label');">
         <setter>
-          this.setAttribute('label', val); 
+          this.setAttribute('label', val);
           var elt = document.getAnonymousElementByAttribute(this, "class", "fileFieldLabel");
           return (elt.value = val);
         </setter>
       </property>
-      
+
       <field name="_file">null</field>
       <property name="file"  onget="return this._file">
         <setter>
         <![CDATA[
-          this._file = val; 
+          this._file = val;
           if (val) {
             this.image = this._getIconURLForFile(val);
             this.label = this._getDisplayNameForFile(val);
           }
           else {
             this.removeAttribute("image");
             var bundle = document.getAnonymousElementByAttribute(this, "anonid", "bundle");
             this.label = bundle.getString("downloadHelperNoneSelected");
-          }            
+          }
           return val;
         ]]>
         </setter>
-      </property>      
+      </property>
       <method name="_getDisplayNameForFile">
         <parameter name="aFile"/>
         <body>
         <![CDATA[
           let { AppConstants } =
               Components.utils.import("resource://gre/modules/AppConstants.jsm", {});
           if (AppConstants.platform == "win") {
             var lfw = aFile.QueryInterface(Components.interfaces.nsILocalFileWin);
@@ -72,27 +72,27 @@
           }
           var ios = Components.classes["@mozilla.org/network/io-service;1"]
                               .getService(Components.interfaces.nsIIOService);
           var url = ios.newFileURI(aFile).QueryInterface(Components.interfaces.nsIURL);
           return url.fileName;
         ]]>
         </body>
       </method>
-      
+
       <method name="_getIconURLForFile">
         <parameter name="aFile"/>
         <body>
         <![CDATA[
           if (!aFile)
             return "";
           var ios = Components.classes["@mozilla.org/network/io-service;1"]
                               .getService(Components.interfaces.nsIIOService);
           var fph = ios.getProtocolHandler("file")
                        .QueryInterface(Components.interfaces.nsIFileProtocolHandler);
           var urlspec = fph.getURLSpecFromFile(aFile);
-          return "moz-icon://" + urlspec + "?size=16";  
+          return "moz-icon://" + urlspec + "?size=16";
         ]]>
         </body>
       </method>
     </implementation>
   </binding>
 </bindings>
--- a/toolkit/content/widgets/listbox.xml
+++ b/toolkit/content/widgets/listbox.xml
@@ -658,17 +658,17 @@
         <xul:listcols>
           <xul:listcol flex="1"/>
         </xul:listcols>
       </children>
       <xul:listrows>
         <children includes="listhead"/>
         <xul:listboxbody xbl:inherits="rows,size,minheight">
           <children includes="listitem"/>
-        </xul:listboxbody> 
+        </xul:listboxbody>
       </xul:listrows>
     </content>
 
     <implementation>
 
       <!-- ///////////////// public listbox members ///////////////// -->
 
       <property name="listBoxObject"
@@ -784,17 +784,17 @@
       <method name="getRowCount">
         <body>
           return this.listBoxObject.getRowCount();
         </body>
       </method>
 
       <method name="scrollOnePage">
         <parameter name="direction"/>  <!-- Must be -1 or 1 -->
-        <body>      
+        <body>
           <![CDATA[
             var pageOffset = this.getNumberOfVisibleRows() * direction;
             // skip over invisible elements - the user won't care about them
             for (var i = 0; i != pageOffset; i += direction) {
               var item = this.getItemAtIndex(this.currentIndex + i);
               if (item && !this._canUserSelect(item))
                 pageOffset += direction;
             }
@@ -807,22 +807,22 @@
                   maxTop--;
               }
               if (newTop >= maxTop)
                 newTop = maxTop;
             }
             if (newTop < 0)
               newTop = 0;
             this.scrollToIndex(newTop);
-            return pageOffset;          
+            return pageOffset;
           ]]>
         </body>
       </method>
     </implementation>
-    
+
     <handlers>
       <handler event="keypress" key=" " phase="target">
         <![CDATA[
           if (this.currentItem) {
             if (this.currentItem.getAttribute("type") != "checkbox")
               this.addItemToSelection(this.currentItem);
             else if (!this.currentItem.disabled) {
               this.currentItem.checked = !this.currentItem.checked;
@@ -843,17 +843,17 @@
               targetIndex = this.itemCount - 1;
               // Fall through for actual action
             case event.DIRECTION_UP:
               this.ensureIndexIsVisible(targetIndex);
               break;
           }
         ]]>
       </handler>
-    </handlers>    
+    </handlers>
   </binding>
 
   <binding id="listrows">
 
     <resources>
       <stylesheet src="chrome://global/skin/listbox.css"/>
     </resources>
 
@@ -882,17 +882,17 @@
 
         // shouldn't be scrolled by pixel scrolling events before a line/page
         // scrolling event.
         event.preventDefault();
       ]]>
       </handler>
     </handlers>
   </binding>
-  
+
   <binding id="listitem" role="xul:listitem"
            extends="chrome://global/content/bindings/general.xml#basetext">
     <resources>
       <stylesheet src="chrome://global/skin/listbox.css"/>
     </resources>
 
     <content>
       <children>
@@ -913,22 +913,22 @@
             this._fireEvent(val ? "DOMMenuItemActive" : "DOMMenuItemInactive");
           }
 
           return val;
         ]]></setter>
       </property>
 
       <!-- ///////////////// nsIDOMXULSelectControlItemElement ///////////////// -->
-                
+
       <property name="value" onget="return this.getAttribute('value');"
                              onset="this.setAttribute('value', val); return val;"/>
       <property name="label" onget="return this.getAttribute('label');"
                              onset="this.setAttribute('label', val); return val;"/>
-      
+
       <property name="selected" onget="return this.getAttribute('selected') == 'true';">
         <setter><![CDATA[
           if (val)
             this.setAttribute("selected", "true");
           else
             this.removeAttribute("selected");
 
           return val;
@@ -1016,17 +1016,17 @@
   <binding id="listitem-iconic"
            extends="chrome://global/content/bindings/listbox.xml#listitem">
     <content>
       <children>
         <xul:listcell class="listcell-iconic" xbl:inherits="label,image,crop,disabled,flexlabel"/>
       </children>
     </content>
   </binding>
-  
+
   <binding id="listitem-checkbox"
            extends="chrome://global/content/bindings/listbox.xml#listitem">
     <content>
       <children>
         <xul:listcell type="checkbox" xbl:inherits="label,crop,checked,disabled,flexlabel"/>
       </children>
     </content>
 
@@ -1041,37 +1041,37 @@
           var event = document.createEvent('Events');
           event.initEvent('CheckboxStateChange', true, true);
           this.dispatchEvent(event);
           return val;
         ]]></setter>
       </property>
     </implementation>
 
-    <handlers> 
+    <handlers>
       <handler event="mousedown" button="0">
       <![CDATA[
         if (!this.disabled && !this.control.disabled) {
           this.checked = !this.checked;
           this.doCommand();
         }
       ]]>
       </handler>
     </handlers>
   </binding>
-  
+
   <binding id="listitem-checkbox-iconic"
            extends="chrome://global/content/bindings/listbox.xml#listitem-checkbox">
     <content>
       <children>
         <xul:listcell type="checkbox" class="listcell-iconic" xbl:inherits="label,image,crop,checked,disabled,flexlabel"/>
       </children>
     </content>
   </binding>
-  
+
   <binding id="listcell" role="xul:listcell"
            extends="chrome://global/content/bindings/general.xml#basecontrol">
 
     <resources>
       <stylesheet src="chrome://global/skin/listbox.css"/>
     </resources>
 
     <content>
--- a/toolkit/content/widgets/popup.xml
+++ b/toolkit/content/widgets/popup.xml
@@ -159,45 +159,45 @@
 
       <property name="alignmentOffset" readonly="true">
         <getter>
         <![CDATA[
           return this.popupBoxObject.alignmentOffset;
         ]]>
         </getter>
       </property>
-      
+
       <method name="enableKeyboardNavigator">
         <parameter name="aEnableKeyboardNavigator"/>
         <body>
         <![CDATA[
           this.popupBoxObject.enableKeyboardNavigator(aEnableKeyboardNavigator);
         ]]>
         </body>
       </method>
-      
+
       <method name="enableRollup">
         <parameter name="aEnableRollup"/>
         <body>
         <![CDATA[
           this.popupBoxObject.enableRollup(aEnableRollup);
         ]]>
         </body>
       </method>
-      
+
       <method name="sizeTo">
         <parameter name="aWidth"/>
         <parameter name="aHeight"/>
         <body>
         <![CDATA[
           this.popupBoxObject.sizeTo(aWidth, aHeight);
         ]]>
         </body>
       </method>
-      
+
       <method name="moveTo">
         <parameter name="aLeft"/>
         <parameter name="aTop"/>
         <body>
         <![CDATA[
           this.popupBoxObject.moveTo(aLeft, aTop);
         ]]>
         </body>
@@ -218,23 +218,23 @@
 
       <method name="getOuterScreenRect">
         <body>
         <![CDATA[
           return this.popupBoxObject.getOuterScreenRect();
         ]]>
         </body>
       </method>
-    </implementation>     
+    </implementation>
 
   </binding>
 
   <binding id="popup" role="xul:menupopup"
            extends="chrome://global/content/bindings/popup.xml#popup-base">
-    
+
     <content>
       <xul:arrowscrollbox class="popup-internal-box" flex="1" orient="vertical"
                           smoothscroll="false">
         <children/>
       </xul:arrowscrollbox>
     </content>
 
     <handlers>
@@ -275,17 +275,17 @@
             draghandle.mouseDownCheck = function () {
               return this._dragBindingAlive;
             }
           } catch (e) {}
         }
       ]]>
       </constructor>
     </implementation>
-    
+
     <handlers>
       <handler event="popupshowing"><![CDATA[
         // Capture the previous focus before has a chance to get set inside the panel
         try {
           this._prevFocus = document.commandDispatcher.focusedElement;
           if (this._prevFocus)
             return;
         } catch (ex) { }
@@ -498,38 +498,38 @@
 
   <binding id="tooltip" role="xul:tooltip"
            extends="chrome://global/content/bindings/popup.xml#popup-base">
     <content>
       <children>
         <xul:label class="tooltip-label" xbl:inherits="xbl:text=label" flex="1"/>
       </children>
     </content>
-    
+
     <implementation>
       <field name="_mouseOutCount">0</field>
       <field name="_isMouseOver">false</field>
-      
+
       <property name="label"
                 onget="return this.getAttribute('label');"
                 onset="this.setAttribute('label', val); return val;"/>
 
       <property name="page" onset="if (val) this.setAttribute('page', 'true');
                                    else this.removeAttribute('page');
                                    return val;"
                             onget="return this.getAttribute('page') == 'true';"/>
 
       <!-- Given the supplied element within a page, set the tooltip's text to the text
            for that element. Returns true if text was assigned, and false if the no text
            is set, which normally would be used to cancel tooltip display.
 
            Note that DefaultTooltipTextProvider::GetNodeText() from nsDocShellTreeOwner.cpp
            also performs the same function, but for embedded clients that don't use a XUL/JS
            layer. These two should be kept synchronized.
-        --> 
+        -->
       <method name="fillInPageTooltip">
         <parameter name="tipElement"/>
         <body>
         <![CDATA[
           // Don't show the tooltip if the tooltip node is a document or disconnected.
           if (!tipElement || !tipElement.ownerDocument ||
               (tipElement.ownerDocument.compareDocumentPosition(tipElement) & document.DOCUMENT_POSITION_DISCONNECTED)) {
             return false;
@@ -662,17 +662,17 @@
     </implementation>
 
     <handlers>
       <handler event="mouseover"><![CDATA[
         var rel = event.relatedTarget;
         //dump("ENTERING " + (rel ? rel.localName : "null") + "\n");
         if (!rel)
           return;
-          
+
         // find out if the node we entered from is one of our anonymous children
         while (rel) {
           if (rel == this)
             break;
           rel = rel.parentNode;
         }
 
         // if the exited node is not a descendant of ours, we are entering for the first time
@@ -682,36 +682,36 @@
 
       <handler event="mouseout"><![CDATA[
         var rel = event.relatedTarget;
         //dump("LEAVING " + (rel ? rel.localName : "null") + "\n");
 
         // relatedTarget is null when the titletip is first shown: a mouseout event fires
         // because the mouse is exiting the main window and entering the titletip "window".
         // relatedTarget is also null when the mouse exits the main window completely,
-        // so count how many times relatedTarget was null after titletip is first shown 
+        // so count how many times relatedTarget was null after titletip is first shown
         // and hide popup the 2nd time
         if (!rel) {
           ++this._mouseOutCount;
           if (this._mouseOutCount > 1)
             this.hidePopup();
           return;
         }
-          
+
         // find out if the node we are entering is one of our anonymous children
         while (rel) {
           if (rel == this)
             break;
           rel = rel.parentNode;
         }
-        
+
         // if the entered node is not a descendant of ours, hide the tooltip
         if (rel != this && this._isMouseOver) {
           this.hidePopup();
-        }        
+        }
       ]]></handler>
 
       <handler event="popupshowing"><![CDATA[
         if (this.page && !this.fillInPageTooltip(this.triggerNode)) {
           event.preventDefault();
         }
       ]]></handler>
 
--- a/toolkit/content/widgets/preferences.xml
+++ b/toolkit/content/widgets/preferences.xml
@@ -59,34 +59,34 @@
             var preference = this.childNodes[i];
             if (preference.name == aData) {
               preference.value = preference.valueFromPreferences;
             }
           }
         ]]>
         </body>
       </method>
-      
+
       <method name="fireChangedEvent">
         <parameter name="aPreference"/>
         <body>
         <![CDATA[
           // Value changed, synthesize an event
           try {
             var event = document.createEvent("Events");
             event.initEvent("change", true, true);
             aPreference.dispatchEvent(event);
           }
           catch (e) {
             Components.utils.reportError(e);
           }
         ]]>
         </body>
       </method>
-      
+
       <field name="service">
         Components.classes["@mozilla.org/preferences-service;1"]
                   .getService(Components.interfaces.nsIPrefService);
       </field>
       <field name="rootBranch">
         Components.classes["@mozilla.org/preferences-service;1"]
                   .getService(Components.interfaces.nsIPrefBranch);
       </field>
@@ -126,21 +126,21 @@
         // we have nothing to do here
         if (!this.name)
           return;
 
         this.preferences.rootBranchInternal
             .addObserver(this.name, this.preferences, false);
         // In non-instant apply mode, we must try and use the last saved state
         // from any previous opens of a child dialog instead of the value from
-        // preferences, to pick up any edits a user may have made. 
+        // preferences, to pick up any edits a user may have made.
 
         var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
                     .getService(Components.interfaces.nsIScriptSecurityManager);
-        if (this.preferences.type == "child" && 
+        if (this.preferences.type == "child" &&
             !this.instantApply && window.opener &&
             secMan.isSystemPrincipal(window.opener.document.nodePrincipal)) {
           var pdoc = window.opener.document;
 
           // Try to find a preference element for the same preference.
           var preference = null;
           var parentPreferences = pdoc.getElementsByTagName("preferences");
           for (var k = 0; (k < parentPreferences.length && !preference); ++k) {
@@ -171,23 +171,23 @@
         </getter>
       </property>
 
       <property name="preferences" onget="return this.parentNode"/>
       <property name="name" onget="return this.getAttribute('name');">
         <setter>
           if (val == this.name)
             return val;
-            
+
           this.preferences.rootBranchInternal
               .removeObserver(this.name, this.preferences);
           this.setAttribute('name', val);
           this.preferences.rootBranchInternal
               .addObserver(val, this.preferences, false);
-              
+
           return val;
         </setter>
       </property>
       <property name="type" onget="return this.getAttribute('type');"
                             onset="this.setAttribute('type', val); return val;"/>
       <property name="inverted" onget="return this.getAttribute('inverted') == 'true';"
                                 onset="this.setAttribute('inverted', val); return val;"/>
       <property name="readonly" onget="return this.getAttribute('readonly') == 'true';"
@@ -204,127 +204,127 @@
               this.valueFromPreferences = aValue;
             this.preferences.fireChangedEvent(this);
           }
           return aValue;
         ]]>
         </body>
       </method>
       <property name="value" onget="return this._value" onset="return this._setValue(val);"/>
-      
+
       <property name="locked">
         <getter>
           return this.preferences.rootBranch.prefIsLocked(this.name);
         </getter>
       </property>
-      
+
       <property name="disabled">
         <getter>
           return this.getAttribute("disabled") == "true";
         </getter>
         <setter>
         <![CDATA[
-          if (val) 
+          if (val)
             this.setAttribute("disabled", "true");
           else
             this.removeAttribute("disabled");
 
           if (!this.id)
             return val;
 
           var elements = document.getElementsByAttribute("preference", this.id);
           for (var i = 0; i < elements.length; ++i) {
             elements[i].disabled = val;
-            
+
             var labels = document.getElementsByAttribute("control", elements[i].id);
             for (var j = 0; j < labels.length; ++j)
               labels[j].disabled = val;
           }
-            
+
           return val;
         ]]>
         </setter>
       </property>
-      
+
       <property name="tabIndex">
         <getter>
           return parseInt(this.getAttribute("tabindex"));
         </getter>
         <setter>
         <![CDATA[
-          if (val) 
+          if (val)
             this.setAttribute("tabindex", val);
           else
             this.removeAttribute("tabindex");
 
           if (!this.id)
             return val;
 
           var elements = document.getElementsByAttribute("preference", this.id);
           for (var i = 0; i < elements.length; ++i) {
             elements[i].tabIndex = val;
-            
+
             var labels = document.getElementsByAttribute("control", elements[i].id);
             for (var j = 0; j < labels.length; ++j)
               labels[j].tabIndex = val;
           }
-            
+
           return val;
         ]]>
         </setter>
       </property>
 
       <property name="hasUserValue">
         <getter>
         <![CDATA[
           return this.preferences.rootBranch.prefHasUserValue(this.name) &&
                  this.value !== undefined;
         ]]>
         </getter>
       </property>
-      
+
       <method name="reset">
         <body>
           // defer reset until preference update
           this.value = undefined;
         </body>
       </method>
 
-      <field name="_useDefault">false</field>      
+      <field name="_useDefault">false</field>
       <property name="defaultValue">
         <getter>
         <![CDATA[
           this._useDefault = true;
           var val = this.valueFromPreferences;
           this._useDefault = false;
           return val;
         ]]>
         </getter>
       </property>
-      
+
       <property name="_branch">
         <getter>
           return this._useDefault ? this.preferences.defaultBranch : this.preferences.rootBranch;
         </getter>
       </property>
-      
+
       <field name="batching">false</field>
-      
+
       <method name="_reportUnknownType">
         <body>
         <![CDATA[
           var consoleService = Components.classes["@mozilla.org/consoleservice;1"]
                                          .getService(Components.interfaces.nsIConsoleService);
-          var msg = "<preference> with id='" + this.id + "' and name='" + 
+          var msg = "<preference> with id='" + this.id + "' and name='" +
                     this.name + "' has unknown type '" + this.type + "'.";
           consoleService.logStringMessage(msg);
         ]]>
         </body>
       </method>
-      
+
       <property name="valueFromPreferences">
         <getter>
         <![CDATA[
           try {
             // Force a resync of value with preferences.
             switch (this.type) {
             case "int":
               return this._branch.getIntPref(this.name);
@@ -399,69 +399,69 @@
             var lf;
             if (typeof(val) == "string") {
               lf = Components.classes["@mozilla.org/file/local;1"]
                              .createInstance(Components.interfaces.nsILocalFile);
               lf.persistentDescriptor = val;
               if (!lf.exists())
                 lf.initWithPath(val);
             }
-            else 
+            else
               lf = val.QueryInterface(Components.interfaces.nsILocalFile);
             this.preferences.rootBranch
                 .setComplexValue(this.name, Components.interfaces.nsILocalFile, lf);
             break;
           default:
             this._reportUnknownType();
           }
           if (!this.batching)
             this.preferences.service.savePrefFile(null);
           return val;
         ]]>
         </setter>
       </property>
-      
+
       <method name="setElementValue">
         <parameter name="aElement"/>
         <body>
         <![CDATA[
           if (this.locked)
             aElement.disabled = true;
 
           if (!this.isElementEditable(aElement))
             return;
 
           var rv = undefined;
           if (aElement.hasAttribute("onsyncfrompreference")) {
             // Value changed, synthesize an event
             try {
               var event = document.createEvent("Events");
               event.initEvent("syncfrompreference", true, true);
-              var f = new Function ("event", 
+              var f = new Function ("event",
                                     aElement.getAttribute("onsyncfrompreference"));
               rv = f.call(aElement, event);
             }
             catch (e) {
               Components.utils.reportError(e);
             }
           }
           var val = rv !== undefined ? rv : (this.instantApply ? this.valueFromPreferences : this.value);
           // if the preference is marked for reset, show default value in UI
           if (val === undefined)
             val = this.defaultValue;
 
           /**
-           * Initialize a UI element property with a value. Handles the case 
+           * Initialize a UI element property with a value. Handles the case
            * where an element has not yet had a XBL binding attached for it and
            * the property setter does not yet exist by setting the same attribute
-           * on the XUL element using DOM apis and assuming the element's 
-           * constructor or property getters appropriately handle this state. 
+           * on the XUL element using DOM apis and assuming the element's
+           * constructor or property getters appropriately handle this state.
            */
           function setValue(element, attribute, value) {
-            if (attribute in element) 
+            if (attribute in element)
               element[attribute] = value;
             else
               element.setAttribute(attribute, value);
           }
           if (aElement.localName == "checkbox" ||
               aElement.localName == "listitem")
             setValue(aElement, "checked", val);
           else if (aElement.localName == "colorpicker")
@@ -483,29 +483,29 @@
         <parameter name="aElement"/>
         <body>
         <![CDATA[
           if (aElement.hasAttribute("onsynctopreference")) {
             // Value changed, synthesize an event
             try {
               var event = document.createEvent("Events");
               event.initEvent("synctopreference", true, true);
-              var f = new Function ("event", 
+              var f = new Function ("event",
                                     aElement.getAttribute("onsynctopreference"));
               var rv = f.call(aElement, event);
-              if (rv !== undefined) 
+              if (rv !== undefined)
                 return rv;
             }
             catch (e) {
               Components.utils.reportError(e);
             }
           }
-          
+
           /**
-           * Read the value of an attribute from an element, assuming the 
+           * Read the value of an attribute from an element, assuming the
            * attribute is a property on the element's node API. If the property
            * is not present in the API, then assume its value is contained in
            * an attribute, as is the case before a binding has been attached.
            */
           function getValue(element, attribute) {
             if (attribute in element)
               return element[attribute];
             return element.getAttribute(attribute);
@@ -523,52 +523,52 @@
             return parseInt(value, 10) || 0;
           case "bool":
             return typeof(value) == "boolean" ? value : value == "true";
           }
           return value;
         ]]>
         </body>
       </method>
-      
+
       <method name="isElementEditable">
         <parameter name="aElement"/>
         <body>
         <![CDATA[
           switch (aElement.localName) {
           case "checkbox":
           case "colorpicker":
           case "radiogroup":
           case "textbox":
           case "listitem":
           case "listbox":
           case "menulist":
             return true;
           }
           return aElement.getAttribute("preference-editable") == "true";
-        ]]> 
+        ]]>
         </body>
       </method>
-      
+
       <method name="updateElements">
         <body>
         <![CDATA[
           if (!this.id)
             return;
 
-          // This "change" event handler tracks changes made to preferences by 
-          // sources other than the user in this window. 
+          // This "change" event handler tracks changes made to preferences by
+          // sources other than the user in this window.
           var elements = document.getElementsByAttribute("preference", this.id);
-          for (var i = 0; i < elements.length; ++i) 
+          for (var i = 0; i < elements.length; ++i)
             this.setElementValue(elements[i]);
         ]]>
         </body>
       </method>
     </implementation>
-    
+
     <handlers>
       <handler event="change">
         this.updateElements();
       </handler>
     </handlers>
   </binding>
 
   <binding id="prefwindow"
@@ -633,17 +633,17 @@
             var cancelButton  = docElt.getButton("cancel");
 
             let { AppConstants } =
                 Components.utils.import("resource://gre/modules/AppConstants.jsm", {});
             if (AppConstants.platform == "macosx") {
               // no buttons on Mac except Help
               cancelButton.hidden = true;
               // Move Help button to the end
-              document.getAnonymousElementByAttribute(this, "anonid", "spacer").hidden = true;         
+              document.getAnonymousElementByAttribute(this, "anonid", "spacer").hidden = true;
               // Also, don't fire onDialogAccept on enter
               acceptButton.disabled = true;
             } else {
               // morph the Cancel button into the Close button
               cancelButton.setAttribute ("icon", "close");
               cancelButton.label = docElt.getAttribute("closebuttonlabel");
               cancelButton.accesskey = docElt.getAttribute("closebuttonaccesskey");
             }
@@ -710,36 +710,36 @@
 
       <property name="type" onget="return this.getAttribute('type');"/>
       <property name="_paneDeck"
                 onget="return document.getAnonymousElementByAttribute(this, 'anonid', 'paneDeck');"/>
       <property name="_paneDeckContainer"
                 onget="return document.getAnonymousElementByAttribute(this, 'class', 'paneDeckContainer');"/>
       <property name="_selector"
                 onget="return document.getAnonymousElementByAttribute(this, 'anonid', 'selector');"/>
-      <property name="lastSelected" 
+      <property name="lastSelected"
                 onget="return this.getAttribute('lastSelected');">
         <setter>
-          this.setAttribute("lastSelected", val); 
+          this.setAttribute("lastSelected", val);
           document.persist(this.id, "lastSelected");
           return val;
-        </setter>          
+        </setter>
       </property>
       <property name="currentPane"
                 onset="return this._currentPane = val;">
         <getter>
           if (!this._currentPane)
             this._currentPane = this.preferencePanes[0];
-          
+
           return this._currentPane;
-        </getter> 
+        </getter>
       </property>
       <field name="_currentPane">null</field>
-      
-      
+
+
       <method name="_makePaneButton">
         <parameter name="aPaneElement"/>
         <body>
         <![CDATA[
           var radio = document.createElement("radio");
           radio.setAttribute("pane", aPaneElement.id);
           radio.setAttribute("label", aPaneElement.label);
           // Expose preference group choice to accessibility APIs as an unchecked list item
@@ -761,61 +761,61 @@
             return;
 
           this._selector.selectedItem = document.getAnonymousElementByAttribute(this, "pane", aPaneElement.id);
           if (!aPaneElement.loaded) {
             let OverlayLoadObserver = function(aPane)
             {
               this._pane = aPane;
             }
-            OverlayLoadObserver.prototype = { 
+            OverlayLoadObserver.prototype = {
               _outer: this,
-              observe: function (aSubject, aTopic, aData) 
+              observe: function (aSubject, aTopic, aData)
               {
                 this._pane.loaded = true;
                 this._outer._fireEvent("paneload", this._pane);
                 this._outer._selectPane(this._pane);
               }
             };
-            
+
             var obs = new OverlayLoadObserver(aPaneElement);
             document.loadOverlay(aPaneElement.src, obs);
           }
           else
             this._selectPane(aPaneElement);
         ]]>
         </body>
       </method>
-      
+
       <method name="_fireEvent">
         <parameter name="aEventName"/>
         <parameter name="aTarget"/>
         <body>
         <![CDATA[
-          // Panel loaded, synthesize a load event. 
+          // Panel loaded, synthesize a load event.
           try {
             var event = document.createEvent("Events");
             event.initEvent(aEventName, true, true);
             var cancel = !aTarget.dispatchEvent(event);
             if (aTarget.hasAttribute("on" + aEventName)) {
               var fn = new Function ("event", aTarget.getAttribute("on" + aEventName));
               var rv = fn.call(aTarget, event);
               if (rv == false)
                 cancel = true;
             }
-            return !cancel;  
+            return !cancel;
           }
-          catch (e) { 
+          catch (e) {
             Components.utils.reportError(e);
           }
           return false;
         ]]>
         </body>
       </method>
-      
+
       <field name="_initialized">false</field>
       <method name="_selectPane">
         <parameter name="aPaneElement"/>
         <body>
         <![CDATA[
           let { AppConstants } =
               Components.utils.import("resource://gre/modules/AppConstants.jsm", {});
           if (AppConstants.platform == "macosx") {
@@ -824,23 +824,23 @@
               document.title = paneTitle;
           }
           var helpButton = document.documentElement.getButton("help");
           if (aPaneElement.helpTopic)
             helpButton.hidden = false;
           else
             helpButton.hidden = true;
 
-          // Find this pane's index in the deck and set the deck's 
+          // Find this pane's index in the deck and set the deck's
           // selectedIndex to that value to switch to it.
           var prefpanes = this.preferencePanes;
           for (var i = 0; i < prefpanes.length; ++i) {
             if (prefpanes[i] == aPaneElement) {
               this._paneDeck.selectedIndex = i;
-              
+
               if (this.type != "child") {
                 if (aPaneElement.hasAttribute("flex") && this._shouldAnimate &&
                     prefpanes.length > 1)
                   aPaneElement.removeAttribute("flex");
                 // Calling sizeToContent after the first prefpane is loaded
                 // will size the windows contents so style information is
                 // available to calculate correct sizing.
                 if (!this._initialized && prefpanes.length > 1) {
@@ -883,76 +883,76 @@
                 }
               }
               break;
             }
           }
         ]]>
         </body>
       </method>
-      
+
       <property name="_shouldAnimate">
         <getter>
         <![CDATA[
           let { AppConstants } =
               Components.utils.import("resource://gre/modules/AppConstants.jsm", {});
           var psvc = Components.classes["@mozilla.org/preferences-service;1"]
                                .getService(Components.interfaces.nsIPrefBranch);
           var animate = AppConstants.platform == "macosx";
           try {
             animate = psvc.getBoolPref("browser.preferences.animateFadeIn");
           }
           catch (e) { }
           return animate;
         ]]>
         </getter>
       </property>
-      
+
       <method name="animate">
         <parameter name="aOldPane"/>
         <parameter name="aNewPane"/>
         <body>
         <![CDATA[
           // if we are already resizing, use currentHeight
           var oldHeight = this._currentHeight ? this._currentHeight : aOldPane.contentHeight;
-          
+
           this._multiplier = aNewPane.contentHeight > oldHeight ? 1 : -1;
           var sizeDelta = Math.abs(oldHeight - aNewPane.contentHeight);
           this._animateRemainder = sizeDelta % this._animateIncrement;
 
           this._setUpAnimationTimer(oldHeight);
         ]]>
         </body>
       </method>
-      
+
       <property name="_sizeIncrement">
         <getter>
         <![CDATA[
           var lastSelectedPane = document.getElementById(this.lastSelected);
           var increment = this._animateIncrement * this._multiplier;
           var newHeight = this._currentHeight + increment;
           if ((this._multiplier > 0 && this._currentHeight >= lastSelectedPane.contentHeight) ||
               (this._multiplier < 0 && this._currentHeight <= lastSelectedPane.contentHeight))
             return 0;
-          
+
           if ((this._multiplier > 0 && newHeight > lastSelectedPane.contentHeight) ||
               (this._multiplier < 0 && newHeight < lastSelectedPane.contentHeight))
             increment = this._animateRemainder * this._multiplier;
           return increment;
         ]]>
         </getter>
       </property>
-      
+
       <method name="notify">
         <parameter name="aTimer"/>
         <body>
         <![CDATA[
           if (!document)
             aTimer.cancel();
-          
+
           if (aTimer == this._animateTimer) {
             var increment = this._sizeIncrement;
             if (increment != 0) {
               window.innerHeight += increment;
               this._currentHeight += increment;
             }
             else {
               aTimer.cancel();
@@ -966,80 +966,80 @@
             else {
               aTimer.cancel();
               elt.style.opacity = 1.0;
             }
           }
         ]]>
         </body>
       </method>
-      
+
       <method name="_setUpAnimationTimer">
         <parameter name="aStartHeight"/>
         <body>
         <![CDATA[
-          if (!this._animateTimer) 
+          if (!this._animateTimer)
             this._animateTimer = Components.classes["@mozilla.org/timer;1"]
                                            .createInstance(Components.interfaces.nsITimer);
           else
             this._animateTimer.cancel();
           this._currentHeight = aStartHeight;
-          
-          this._animateTimer.initWithCallback(this, this._animateDelay, 
+
+          this._animateTimer.initWithCallback(this, this._animateDelay,
                                               Components.interfaces.nsITimer.TYPE_REPEATING_SLACK);
         ]]>
         </body>
       </method>
-      
+
       <method name="_setUpFadeTimer">
         <body>
         <![CDATA[
-          if (!this._fadeTimer) 
+          if (!this._fadeTimer)
             this._fadeTimer = Components.classes["@mozilla.org/timer;1"]
                                         .createInstance(Components.interfaces.nsITimer);
           else
             this._fadeTimer.cancel();
-          
-          this._fadeTimer.initWithCallback(this, this._fadeDelay, 
+
+          this._fadeTimer.initWithCallback(this, this._fadeDelay,
                                            Components.interfaces.nsITimer.TYPE_REPEATING_SLACK);
         ]]>
         </body>
       </method>
-      
+
       <field name="_animateTimer">null</field>
       <field name="_fadeTimer">null</field>
       <field name="_animateDelay">15</field>
       <field name="_animateIncrement">40</field>
       <field name="_fadeDelay">5</field>
       <field name="_fadeIncrement">0.40</field>
       <field name="_animateRemainder">0</field>
       <field name="_currentHeight">0</field>
       <field name="_multiplier">0</field>
 
       <method name="addPane">
         <parameter name="aPaneElement"/>
         <body>
         <![CDATA[
           this.appendChild(aPaneElement);
-          
+
           // Set up pane button
           this._makePaneButton(aPaneElement);
         ]]>
         </body>
       </method>
-      
+
       <method name="openSubDialog">
         <parameter name="aURL"/>
         <parameter name="aFeatures"/>
         <parameter name="aParams"/>
         <body>
           return openDialog(aURL, "", "modal,centerscreen,resizable=no" + (aFeatures != "" ? ("," + aFeatures) : ""), aParams);
         </body>
       </method>
-      
+
       <method name="openWindow">
         <parameter name="aWindowType"/>
         <parameter name="aURL"/>
         <parameter name="aFeatures"/>
         <parameter name="aParams"/>
         <body>
         <![CDATA[
           var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
@@ -1076,17 +1076,17 @@
           var pdocEl = window.opener.document.documentElement;
           if (pdocEl.instantApply) {
             let panes = this.preferencePanes;
             for (let i = 0; i < panes.length; ++i)
               panes[i].writePreferences(true);
           }
           else {
             // Clone all the preferences elements from the child document and
-            // insert them into the pane collection of the parent. 
+            // insert them into the pane collection of the parent.
             var pdoc = window.opener.document;
             if (pdoc.documentElement.localName == "prefwindow") {
               var currentPane = pdoc.documentElement.currentPane;
               var id = window.location.href + "#childprefs";
               var childPrefs = pdoc.getElementById(id);
               if (!childPrefs) {
                 childPrefs = pdoc.createElement("preferences");
                 currentPane.appendChild(childPrefs);
@@ -1165,17 +1165,17 @@
           return;
         this._fireEvent("dialoghelp", this);
         event.stopPropagation();
         event.preventDefault();
       ]]>
       </handler>
     </handlers>
   </binding>
-  
+
   <binding id="prefpane">
     <resources>
       <stylesheet src="chrome://global/skin/preferences.css"/>
     </resources>
     <content>
       <xul:vbox class="content-box" xbl:inherits="flex">
         <children/>
       </xul:vbox>
@@ -1200,30 +1200,30 @@
           if (aFlushToDisk) {
             var psvc = Components.classes["@mozilla.org/preferences-service;1"]
                                  .getService(Components.interfaces.nsIPrefService);
             psvc.savePrefFile(null);
           }
         ]]>
         </body>
       </method>
-      
-      <property name="src" 
+
+      <property name="src"
                 onget="return this.getAttribute('src');"
                 onset="this.setAttribute('src', val); return val;"/>
-      <property name="selected" 
+      <property name="selected"
                 onget="return this.getAttribute('selected') == 'true';"
                 onset="this.setAttribute('selected', val); return val;"/>
-      <property name="image" 
+      <property name="image"
                 onget="return this.getAttribute('image');"
                 onset="this.setAttribute('image', val); return val;"/>
-      <property name="label" 
+      <property name="label"
                 onget="return this.getAttribute('label');"
                 onset="this.setAttribute('label', val); return val;"/>
-      
+
       <property name="preferenceElements"
                 onget="return this.getElementsByAttribute('preference', '*');"/>
       <property name="preferences"
                 onget="return this.getElementsByTagName('preference');"/>
 
       <property name="helpTopic">
         <getter>
         <![CDATA[
@@ -1237,40 +1237,40 @@
 
           // otherwise, return the helpTopic of the current panel
           return this.getAttribute("helpTopic");
         ]]>
         </getter>
       </property>
 
       <field name="_loaded">false</field>
-      <property name="loaded" 
+      <property name="loaded"
                 onget="return !this.src ? true : this._loaded;"
                 onset="this._loaded = val; return val;"/>
-      
+
       <method name="preferenceForElement">
         <parameter name="aElement"/>
         <body>
           return document.getElementById(aElement.getAttribute("preference"));
         </body>
       </method>
-      
+
       <method name="getPreferenceElement">
         <parameter name="aStartElement"/>
         <body>
         <![CDATA[
           var temp = aStartElement;
-          while (temp && temp.nodeType == Node.ELEMENT_NODE && 
+          while (temp && temp.nodeType == Node.ELEMENT_NODE &&
                  !temp.hasAttribute("preference"))
             temp = temp.parentNode;
           return temp.nodeType == Node.ELEMENT_NODE ? temp : aStartElement;
         ]]>
         </body>
       </method>
-      
+
       <field name="DeferredTask" readonly="true">
         let targetObj = {};
         Components.utils.import("resource://gre/modules/DeferredTask.jsm", targetObj);
         targetObj.DeferredTask;
       </field>
       <method name="_deferredValueUpdate">
         <parameter name="aElement"/>
         <body>
@@ -1316,71 +1316,71 @@
                 element._deferredValueUpdateTask.disarm();
               }
               element._deferredValueUpdateTask.arm();
             }
           }
         ]]>
         </body>
       </method>
-      
+
       <property name="contentHeight">
         <getter>
           var targetHeight = parseInt(window.getComputedStyle(this._content, "").height);
           targetHeight += parseInt(window.getComputedStyle(this._content, "").marginTop);
           targetHeight += parseInt(window.getComputedStyle(this._content, "").marginBottom);
           return targetHeight;
         </getter>
       </property>
       <field name="_content">
         document.getAnonymousElementByAttribute(this, "class", "content-box");
       </field>
     </implementation>
     <handlers>
       <handler event="command">
-        // This "command" event handler tracks changes made to preferences by 
+        // This "command" event handler tracks changes made to preferences by
         // the user in this window.
         if (event.sourceEvent)
           event = event.sourceEvent;
         this.userChangedValue(event.target);
       </handler>
       <handler event="select">
-        // This "select" event handler tracks changes made to colorpicker 
+        // This "select" event handler tracks changes made to colorpicker
         // preferences by the user in this window.
-        if (event.target.localName == "colorpicker") 
+        if (event.target.localName == "colorpicker")
           this.userChangedValue(event.target);
       </handler>
       <handler event="change">
-        // This "change" event handler tracks changes made to preferences by 
-        // the user in this window. 
+        // This "change" event handler tracks changes made to preferences by
+        // the user in this window.
         this.userChangedValue(event.target);
       </handler>
       <handler event="input">
-        // This "input" event handler tracks changes made to preferences by 
+        // This "input" event handler tracks changes made to preferences by
         // the user in this window.
         this.userChangedValue(event.target);
       </handler>
       <handler event="paneload">
       <![CDATA[
         // Initialize all values from preferences.
         var elements = this.preferenceElements;
         for (var i = 0; i < elements.length; ++i) {
           try {
             var preference = this.preferenceForElement(elements[i]);
             preference.setElementValue(elements[i]);
           }
           catch (e) {
             dump("*** No preference found for " + elements[i].getAttribute("preference") + "\n");
           }
         }
-      ]]>      
+      ]]>
       </handler>
     </handlers>
   </binding>
-          
+
   <binding id="panebutton" role="xul:listitem"
            extends="chrome://global/content/bindings/radio.xml#radio">
     <resources>
       <stylesheet src="chrome://global/skin/preferences.css"/>
     </resources>
     <content>
       <xul:image class="paneButtonIcon" xbl:inherits="src"/>
       <xul:label class="paneButtonLabel" xbl:inherits="value=label"/>
--- a/toolkit/content/widgets/progressmeter.xml
+++ b/toolkit/content/widgets/progressmeter.xml
@@ -13,43 +13,43 @@
     <resources>
       <stylesheet src="chrome://global/skin/progressmeter.css"/>
     </resources>
 
     <content>
       <xul:spacer class="progress-bar" xbl:inherits="mode"/>
       <xul:spacer class="progress-remainder" xbl:inherits="mode"/>
     </content>
-    
+
     <implementation>
       <property name="mode" onset="if (this.mode != val) this.setAttribute('mode', val); return val;"
                             onget="return this.getAttribute('mode');"/>
 
       <property name="value" onget="return this.getAttribute('value') || '0';">
         <setter><![CDATA[
           var p = Math.round(val);
           var max = Math.round(this.max);
           if (p < 0)
             p = 0;
           else if (p > max)
             p = max;
-          var c = this.value; 
+          var c = this.value;
           if (p != c) {
             var delta = p - c;
             if (delta < 0)
               delta = -delta;
             if (delta > 3 || p == 0 || p == max) {
               this.setAttribute("value", p);
               // Fire DOM event so that accessible value change events occur
               var event = document.createEvent('Events');
               event.initEvent('ValueChange', true, true);
               this.dispatchEvent(event);
             }
           }
-          
+
           return val;
         ]]></setter>
       </property>
       <property name="max"
                 onget="return this.getAttribute('max') || '100';"
                 onset="this.setAttribute('max', isNaN(val) ? 100 : Math.max(val, 1));
                        this.value = this.value;
                        return val;" />
--- a/toolkit/content/widgets/radio.xml
+++ b/toolkit/content/widgets/radio.xml
@@ -159,54 +159,54 @@
               myEvent = document.createEvent("Events");
               myEvent.initEvent("RadioStateChange", true, true);
               previousItem.dispatchEvent(myEvent);
             }
           }
 
           return val;
         ]]>
-        </setter>        
+        </setter>
       </property>
-      
+
       <property name="focusedItem">
         <getter>
         <![CDATA[
           var children = this._getRadioChildren();
           for (var i = 0; i < children.length; ++i) {
             if (children[i].getAttribute("focused") == "true")
               return children[i];
           }
           return null;
         ]]>
         </getter>
         <setter>
         <![CDATA[
           if (val) val.setAttribute("focused", "true");
-          
+
           // unfocus all other group nodes
           var children = this._getRadioChildren();
           for (var i = 0; i < children.length; ++i) {
             if (children[i] != val)
               children[i].removeAttribute("focused");
           }
           return val;
         ]]>
         </setter>
       </property>
-      
+
       <method name="checkAdjacentElement">
         <parameter name="aNextFlag"/>
         <body>
         <![CDATA[
           var currentElement = this.focusedItem || this.selectedItem;
           var i;
           var children = this._getRadioChildren();
           for (i = 0; i < children.length; ++i ) {
-            if (children[i] == currentElement) 
+            if (children[i] == currentElement)
               break;
           }
           var index = i;
 
           if (aNextFlag) {
             do {
               if (++i == children.length)
                 i = 0;
@@ -214,17 +214,17 @@
                 break;
             }
             while (children[i].hidden || children[i].collapsed || children[i].disabled);
             // XXX check for display/visibility props too
 
             this.selectedItem = children[i];
             children[i].doCommand();
           }
-          else {              
+          else {
             do {
               if (i == 0)
                 i = children.length;
               if (--i == index)
                 break;
             }
             while (children[i].hidden || children[i].collapsed || children[i].disabled);
             // XXX check for display/visibility props too
@@ -314,17 +314,17 @@
           radio.setAttribute("label", label);
           radio.setAttribute("value", value);
           this.appendChild(radio);
           this._radioChildren = null;
           return radio;
         ]]>
         </body>
       </method>
-      
+
       <method name="insertItemAt">
         <parameter name="index"/>
         <parameter name="label"/>
         <parameter name="value"/>
         <body>
         <![CDATA[
           var XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
           var radio = document.createElementNS(XULNS, "radio");
@@ -350,23 +350,23 @@
             remove.parentNode.removeChild(remove);
             this._radioChildren = null;
           }
           return remove;
         ]]>
         </body>
       </method>
     </implementation>
-    
+
     <handlers>
       <handler event="mousedown">
         if (this.disabled)
           event.preventDefault();
        </handler>
-     
+
       <!-- keyboard navigation -->
       <!-- Here's how keyboard navigation works in radio groups on Windows:
            The group takes 'focus'
            The user is then free to navigate around inside the group
            using the arrow keys. Accessing previous or following radio buttons
            is done solely through the arrow keys and not the tab button. Tab
            takes you to the next widget in the tab order -->
       <handler event="keypress" key=" " phase="target">
--- a/toolkit/content/widgets/scrollbox.xml
+++ b/toolkit/content/widgets/scrollbox.xml
@@ -393,17 +393,17 @@
               aX > elements[high].getBoundingClientRect()[end])
             return null;
 
           var mid, rect;
           while (low <= high) {
             mid = Math.floor((low + high) / 2);
             rect = elements[mid].getBoundingClientRect();
             if (rect[start] > aX)
-              high = mid - 1; 
+              high = mid - 1;
             else if (rect[end] < aX)
               low = mid + 1;
             else
               return elements[mid];
           }
 
           // There's no element at the requested coordinate, but the algorithm
           // from above yields an element next to it, in a random direction.
@@ -464,17 +464,17 @@
 
           if (this.hasAttribute("notoverflowing")) {
             scrolledToStart = true;
             scrolledToEnd = true;
           }
           else if (this.scrollPosition == 0) {
             // In the RTL case, this means the _last_ element in the
             // scrollbox is visible
-            if (this._isRTLScrollbox) 
+            if (this._isRTLScrollbox)
               scrolledToEnd = true;
             else
               scrolledToStart = true;
           }
           else if (this.scrollClientSize + this.scrollPosition == this.scrollSize) {
             // In the RTL case, this means the _first_ element in the
             // scrollbox is visible
             if (this._isRTLScrollbox)
@@ -549,17 +549,17 @@
         else {    // horizontal scrollbox
           if (event.detail == 0)
             return;
         }
 
         this.setAttribute("notoverflowing", "true");
 
         try {
-          // See bug 341047 and comments in overflow handler as to why 
+          // See bug 341047 and comments in overflow handler as to why
           // try..catch is needed here
           this._updateScrollButtonsDisabledState();
 
           let childNodes = this._getScrollableElements();
           if (childNodes && childNodes.length)
             this.ensureElementIsVisible(childNodes[0], false);
         }
         catch(e) {
@@ -584,23 +584,23 @@
         else {    // horizontal scrollbox
           if (event.detail == 0)
             return;
         }
 
         this.removeAttribute("notoverflowing");
 
         try {
-          // See bug 341047, the overflow event is dispatched when the 
+          // See bug 341047, the overflow event is dispatched when the
           // scrollbox already is mostly destroyed. This causes some code in
           // _updateScrollButtonsDisabledState() to throw an error. It also
           // means that the notoverflowing attribute was removed erroneously,
           // as the whole overflow event should not be happening in that case.
           this._updateScrollButtonsDisabledState();
-        } 
+        }
         catch(e) {
           this.setAttribute("notoverflowing", "true");
         }
       ]]></handler>
 
       <handler event="scroll" action="this._updateScrollButtonsDisabledState()"/>
     </handlers>
   </binding>
@@ -684,17 +684,17 @@
         stop: function arrowSmoothScroll_stop() {
           window.cancelAnimationFrame(this.requestHandle);
           this.requestHandle = 0;
         },
         sample: function arrowSmoothScroll_handleEvent(timeStamp) {
           const scrollIndex = this.scrollbox._scrollIndex;
           const timePassed = timeStamp - this.lastFrameTime;
           this.lastFrameTime = timeStamp;
-          
+
           const scrollDelta = 0.5 * timePassed * scrollIndex;
           this.scrollbox.scrollPosition += scrollDelta;
 
           this.requestHandle = window.requestAnimationFrame(this.sample.bind(this));
         }
       })]]></field>
 
       <method name="_startScroll">
--- a/toolkit/content/widgets/spinbuttons.xml
+++ b/toolkit/content/widgets/spinbuttons.xml
@@ -55,17 +55,17 @@
           // on the Mac, the native theme draws the spinbutton as a single widget
           // so a state attribute is set based on where the mouse button was pressed
           if (event.originalTarget == this._increaseButton)
             this.setAttribute("state", "up");
           else if (event.originalTarget == this._decreaseButton)
             this.setAttribute("state", "down");
         ]]>
       </handler>
-      
+
       <handler event="mouseup">
         this.removeAttribute("state");
       </handler>
       <handler event="mouseout">
         this.removeAttribute("state");
       </handler>
 
       <handler event="command">
@@ -74,17 +74,17 @@
           if (event.originalTarget == this._increaseButton)
             eventname = "up";
           else if (event.originalTarget == this._decreaseButton)
             eventname = "down";
 
           var evt = document.createEvent("Events");
           evt.initEvent(eventname, true, true);
           var cancel = this.dispatchEvent(evt);
-          
+
           if (this.hasAttribute("on" + eventname)) {
             var fn = new Function("event", this.getAttribute("on" + eventname));
             if (fn.call(this, event) == false)
               cancel = true;
           }
 
           return !cancel;
         ]]>
--- a/toolkit/content/widgets/textbox.xml
+++ b/toolkit/content/widgets/textbox.xml
@@ -261,17 +261,17 @@
     <implementation>
       <constructor><![CDATA[
         try {
           var consoleService = Components.classes["@mozilla.org/consoleservice;1"]
                                          .getService(Components.interfaces.nsIConsoleService);
           var scriptError = Components.classes["@mozilla.org/scripterror;1"]
                                       .createInstance(Components.interfaces.nsIScriptError);
           scriptError.init("Timed textboxes are deprecated. Consider using type=\"search\" instead.",
-                           this.ownerDocument.location.href, null, null, 
+                           this.ownerDocument.location.href, null, null,
                            null, scriptError.warningFlag, "XUL Widgets");
           consoleService.logMessage(scriptError);
         } catch (e) {}
       ]]></constructor>
       <field name="_timer">null</field>
       <property name="timeout"
                 onset="this.setAttribute('timeout', val); return val;"
                 onget="return parseInt(this.getAttribute('timeout')) || 0;"/>
--- a/toolkit/content/widgets/toolbar.xml
+++ b/toolkit/content/widgets/toolbar.xml
@@ -9,27 +9,27 @@
           xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
           xmlns:xbl="http://www.mozilla.org/xbl">
 
   <binding id="toolbar-base">
     <resources>
       <stylesheet src="chrome://global/skin/toolbar.css"/>
     </resources>
   </binding>
-  
+
   <binding id="toolbox" extends="chrome://global/content/bindings/toolbar.xml#toolbar-base">
     <implementation>
       <field name="palette">
         null
       </field>
 
       <field name="toolbarset">
         null
       </field>
-      
+
       <field name="customToolbarCount">
         0
       </field>
 
       <field name="externalToolbars">
        []
       </field>
 
@@ -48,56 +48,56 @@
       </property>
 
       <constructor>
         <![CDATA[
           // Look to see if there is a toolbarset.
           this.toolbarset = this.firstChild;
           while (this.toolbarset && this.toolbarset.localName != "toolbarset")
             this.toolbarset = toolbarset.nextSibling;
-          
+
           if (this.toolbarset) {
             // Create each toolbar described by the toolbarset.
             var index = 0;
             while (toolbarset.hasAttribute("toolbar"+(++index))) {
               var toolbarInfo = toolbarset.getAttribute("toolbar"+index);
               var infoSplit = toolbarInfo.split(":");
               this.appendCustomToolbar(infoSplit[0], infoSplit[1]);
             }
           }
         ]]>
       </constructor>
-      
+
       <method name="appendCustomToolbar">
         <parameter name="aName"/>
         <parameter name="aCurrentSet"/>
         <body>
-          <![CDATA[            
+          <![CDATA[
             if (!this.toolbarset)
               return null;
             var toolbar = document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
                                                   "toolbar");
             toolbar.id = "__customToolbar_" + aName.replace(" ", "_");
             toolbar.setAttribute("customizable", "true");
             toolbar.setAttribute("customindex", ++this.customToolbarCount);
             toolbar.setAttribute("toolbarname", aName);
             toolbar.setAttribute("currentset", aCurrentSet);
             toolbar.setAttribute("mode", this.getAttribute("mode"));
             toolbar.setAttribute("iconsize", this.getAttribute("iconsize"));
             toolbar.setAttribute("context", this.toolbarset.getAttribute("context"));
             toolbar.setAttribute("class", "chromeclass-toolbar");
-            
+
             this.insertBefore(toolbar, this.toolbarset);
             return toolbar;
           ]]>
         </body>
       </method>
     </implementation>
   </binding>
-  
+
   <binding id="toolbar" role="xul:toolbar"
            extends="chrome://global/content/bindings/toolbar.xml#toolbar-base">
     <implementation>
       <property name="toolbarName"
                 onget="return this.getAttribute('toolbarname');"
                 onset="this.setAttribute('toolbarname', val); return val;"/>
 
       <field name="_toolbox">null</field>
@@ -159,17 +159,17 @@
           if (!toolbox.palette) {
             // Look to see if there is a toolbarpalette.
             var node = toolbox.firstChild;
             while (node) {
               if (node.localName == "toolbarpalette")
                 break;
               node = node.nextSibling;
             }
-            
+
             if (!node)
               return;
 
             // Hold on to the palette but remove it from the document.
             toolbox.palette = node;
             toolbox.removeChild(node);
           }
 
@@ -318,18 +318,18 @@
               default:
                 var toolbox = this.toolbox;
                 if (!toolbox)
                   break;
 
                 // look for an item with the same id, as the item may be
                 // in a different toolbar.
                 var item = document.getElementById(aId);
-                if (item && item.parentNode && 
-                    item.parentNode.localName == "toolbar" && 
+                if (item && item.parentNode &&
+                    item.parentNode.localName == "toolbar" &&
                     item.parentNode.toolbox == toolbox) {
                   newItem = item;
                   break;
                 }
 
                 if (toolbox.palette) {
                   // Attempt to locate an item with a matching ID within
                   // the palette.
@@ -358,29 +358,29 @@
           <![CDATA[
             var newItem = this._getToolbarItem(aId);
             if (!newItem)
               return null;
 
             var insertItem = newItem;
             // make sure added items are removable
             newItem.setAttribute("removable", "true");
-            
+
             // Wrap the item in another node if so inclined.
             if (aWrapper) {
               aWrapper.appendChild(newItem);
               insertItem = aWrapper;
             }
-            
+
             // Insert the palette item into the toolbar.
             if (aBeforeElt)
               this.insertBefore(insertItem, aBeforeElt);
             else
               this.appendChild(insertItem);
-               
+
             return newItem;
           ]]>
         </body>
       </method>
 
       <method name="hasCustomInteractiveItems">
         <parameter name="aCurrentSet"/>
         <body><![CDATA[
@@ -511,17 +511,17 @@
                      this.getAttribute("customizing") != "true";
             };
           } catch (e) {}
         }
       ]]></constructor>
     </implementation>
   </binding>
 
-  <binding id="menubar" role="xul:menubar" 
+  <binding id="menubar" role="xul:menubar"
            extends="chrome://global/content/bindings/toolbar.xml#toolbar-base" display="xul:menubar">
     <implementation>
        <field name="_active">false</field>
        <field name="_statusbar">null</field>
        <field name="_originalStatusText">null</field>
        <property name="statusbar" onget="return this.getAttribute('statusbar');"
                                   onset="this.setAttribute('statusbar', val); return val;"/>
        <method name="_updateStatusText">
@@ -566,20 +566,20 @@
 
   <binding id="toolbarpaletteitem" extends="chrome://global/content/bindings/toolbar.xml#toolbar-base" display="xul:button">
     <content>
       <xul:hbox class="toolbarpaletteitem-box" flex="1" xbl:inherits="type,place">
         <children/>
       </xul:hbox>
     </content>
   </binding>
-    
+
   <binding id="toolbarpaletteitem-palette" extends="chrome://global/content/bindings/toolbar.xml#toolbarpaletteitem">
     <content>
       <xul:hbox class="toolbarpaletteitem-box" xbl:inherits="type,place">
         <children/>
       </xul:hbox>
       <xul:label xbl:inherits="value=title"/>
     </content>
   </binding>
 
-</bindings>          
+</bindings>
 
--- a/toolkit/content/widgets/tree.xml
+++ b/toolkit/content/widgets/tree.xml
@@ -8,17 +8,17 @@
 <!ENTITY % treeDTD SYSTEM "chrome://global/locale/tree.dtd">
 %treeDTD;
 ]>
 
 <bindings id="treeBindings"
    xmlns="http://www.mozilla.org/xbl"
    xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
    xmlns:xbl="http://www.mozilla.org/xbl">
-  
+
   <binding id="tree-base" extends="chrome://global/content/bindings/general.xml#basecontrol">
     <resources>
       <stylesheet src="chrome://global/skin/tree.css"/>
     </resources>
     <implementation>
       <method name="_isAccelPressed">
         <parameter name="aEvent"/>
         <body><![CDATA[
@@ -37,17 +37,17 @@
         </xul:treerows>
         <xul:textbox anonid="input" class="tree-input" left="0" top="0" hidden="true"/>
       </xul:stack>
       <xul:hbox xbl:inherits="collapsed=hidehscroll">
         <xul:scrollbar orient="horizontal" flex="1" increment="16" style="position:relative; z-index:2147483647;"/>
         <xul:scrollcorner xbl:inherits="collapsed=hidevscroll"/>
       </xul:hbox>
     </content>
-    
+
     <implementation implements="nsIDOMXULTreeElement, nsIDOMXULMultiSelectControlElement">
 
       <!-- ///////////////// nsIDOMXULTreeElement ///////////////// -->
 
       <property name="columns"
                 onget="return this.treeBoxObject.columns;"/>
 
       <property name="view"
@@ -122,17 +122,17 @@
       <field name="_editingRow">-1</field>
       <field name="_editingColumn">null</field>
 
       <property name="editingRow" readonly="true"
                 onget="return this._editingRow;"/>
       <property name="editingColumn" readonly="true"
                 onget="return this._editingColumn;"/>
 
-      <property name="_selectDelay" 
+      <property name="_selectDelay"
                 onset="this.setAttribute('_selectDelay', val);"
                 onget="return this.getAttribute('_selectDelay') || 50;"/>
       <field name="_columnsDirty">true</field>
       <field name="_lastKeyTime">0</field>
       <field name="_incrementalString">""</field>
 
       <method name="_ensureColumnOrder">
         <body><![CDATA[
@@ -144,17 +144,17 @@
             // an odd number and 2 positions above its next sibling
             var cols = [];
             var i;
             for (var col = this.columns.getFirstColumn(); col; col = col.getNext())
               cols.push(col.element);
             for (i = 0; i < cols.length; ++i)
               cols[i].setAttribute("ordinal", (i*2)+1);
 
-            // update the ordinal positions of splitters to even numbers, so that 
+            // update the ordinal positions of splitters to even numbers, so that
             // they are in between columns
             var splitters = this.getElementsByTagName("splitter");
             for (i = 0; i < splitters.length; ++i)
               splitters[i].setAttribute("ordinal", (i+1)*2);
           }
           this._columnsDirty = false;
         ]]></body>
       </method>
@@ -187,17 +187,17 @@
               cols.push(col.element);
 
             aColMove.ordinal = cols[0].ordinal;
             for (i = 0; i < cols.length; ++i)
               cols[i].ordinal = parseInt(cols[i].ordinal) - 2;
           }
         ]]></body>
       </method>
-      
+
       <method name="_getColumnAtX">
         <parameter name="aX"/>
         <parameter name="aThresh"/>
         <parameter name="aPos"/>
         <body><![CDATA[
           var isRTL = document.defaultView.getComputedStyle(this, "")
                               .direction == "rtl";
 
@@ -227,17 +227,17 @@
           if (aPos)
             aPos.value = isRTL ? "before" : "after";
           return columns.pop().element;
         ]]></body>
       </method>
 
       <method name="changeOpenState">
         <parameter name="row"/>
-        <!-- Optional parameter openState == true or false to set. 
+        <!-- Optional parameter openState == true or false to set.
              No openState param == toggle -->
         <parameter name="openState"/>
         <body><![CDATA[
           if (row < 0 || !this.view.isContainer(row)) {
             return false;
           }
 
           if (this.view.isContainerOpen(row) != openState) {
@@ -430,36 +430,36 @@
 
             if (this.view.rowCount == 0)
               return;
 
             if (this._isAccelPressed(event) && this.view.selection.single) {
               this.treeBoxObject.scrollByLines(offset);
               return;
             }
-   
+
             var c = this.currentIndex + offset;
             if (offset > 0 ? c > edge : c < edge) {
               if (this.view.selection.isSelected(edge) && this.view.selection.count <= 1)
                 return;
               c = edge;
             }
-   
+
             var cellSelType = this._cellSelType;
             if (cellSelType) {
               var column = this.view.selection.currentColumn;
               if (!column)
                 return;
-   
+
               while ((offset > 0 ? c <= edge : c >= edge) && !this.view.isSelectable(c, column))
                 c += offset;
               if (offset > 0 ? c > edge : c < edge)
                 return;
             }
-   
+
             if (!this._isAccelPressed(event))
               this.view.selection.timedSelect(c, this._selectDelay);
             else // Ctrl+Up/Down moves the anchor without selecting
               this.currentIndex = c;
             this.treeBoxObject.ensureRowIsVisible(c);
           ]]>
         </body>
       </method>
@@ -479,26 +479,26 @@
               this.treeBoxObject.scrollByLines(offset);
               return;
             }
 
             if (this.view.rowCount == 1 && !this.view.selection.isSelected(0)) {
               this.view.selection.timedSelect(0, this._selectDelay);
               return;
             }
-      
+
             var c = this.currentIndex;
             if (c == -1)
                 c = 0;
 
             if (c == edge) {
               if (this.view.selection.isSelected(c))
                 return;
             }
-      
+
             // Extend the selection from the existing pivot, if any
             this.view.selection.rangedSelect(-1, c + offset,
                                              this._isAccelPressed(event));
             this.treeBoxObject.ensureRowIsVisible(c + offset);
 
           ]]>
         </body>
       </method>
@@ -682,17 +682,17 @@
               if (startedEditing)
                 return true;
             }
           }
           return this.changeOpenState(this.currentIndex);
         ]]></body>
       </method>
     </implementation>
-    
+
     <handlers>
       <handler event="MozMousePixelScroll" preventdefault="true"/>
       <handler event="DOMMouseScroll" preventdefault="true">
         <![CDATA[
           if (this._editingColumn)
             return;
           if (event.axis == event.HORIZONTAL_AXIS)
             return;
@@ -977,17 +977,17 @@
            if (l >= 0) {
              this.view.selection.timedSelect(l, this._selectDelay);
              this.treeBoxObject.ensureRowIsVisible(l);
            }
            event.preventDefault();
          }
          ]]>
       </handler>
-    </handlers>    
+    </handlers>
   </binding>
 
   <binding id="treecols" role="xul:treecolumns">
     <resources>
       <stylesheet src="chrome://global/skin/tree.css"/>
     </resources>
     <content orient="horizontal">
       <xul:hbox class="tree-scrollable-columns" flex="1">
@@ -1085,17 +1085,17 @@
                if (this.parentNode.editable && cell.col.editable &&
                    view.isEditable(cell.row, cell.col)) {
                  var value = view.getCellValue(cell.row, cell.col);
                  value = value == "true" ? "false" : "true";
                  view.setCellValue(cell.row, cell.col, value);
                  return;
                }
              }
-           } 
+           }
 
            var cellSelType = this.parentNode._cellSelType;
            if (cellSelType == "text" && cell.childElt != "text" && cell.childElt != "image")
              return;
 
            if (cellSelType) {
              if (!cell.col.selectable ||
                  !view.isSelectable(cell.row, cell.col)) {
@@ -1166,17 +1166,17 @@
 
         /* We want to deselect all the selected items except what was
           clicked, UNLESS it was a right-click.  We have to do this
           in click rather than mousedown so that you can drag a
           selected group of items */
 
         if (!cell.col) return;
 
-        // if the last row has changed in between the time we 
+        // if the last row has changed in between the time we
         // mousedown and the time we click, don't fire the select handler.
         // see bug #92366
         if (!cell.col.cycler && this._lastSelectedRow == cell.row &&
             cell.col.type != Components.interfaces.nsITreeColumn.TYPE_CHECKBOX) {
 
           var cellSelType = this.parentNode._cellSelType;
           if (cellSelType == "text" && cell.childElt != "text" && cell.childElt != "image")
             return;
@@ -1218,17 +1218,17 @@
         if (this.parentNode._editingColumn || !view.isContainer(row))
           return;
 
         // Cyclers and twisties respond to single clicks, not double clicks
         if (cell.col && !cell.col.cycler && cell.childElt != "twisty")
           this.parentNode.changeOpenState(row);
       ]]>
       </handler>
-      
+
     </handlers>
   </binding>
 
   <binding id="treecol-base" role="xul:treecolumnitem"
            extends="chrome://global/content/bindings/tree.xml#tree-base">
     <implementation>
       <constructor>
         this.parentNode.parentNode._columnsDirty = true;
@@ -1239,17 +1239,17 @@
           var val = this.getAttribute("ordinal");
           return "" + (val == "" ? 1 : (val == "0" ? 0 : parseInt(val)));
         ]]></getter>
         <setter><![CDATA[
           this.setAttribute("ordinal", val);
           return val;
         ]]></setter>
       </property>
-      
+
       <property name="_previousVisibleColumn">
         <getter><![CDATA[
           var sib = this.boxObject.previousSibling;
           while (sib) {
             if (sib.localName == "treecol" && sib.boxObject.width > 0 && sib.parentNode == this.parentNode)
               return sib;
             sib = sib.boxObject.previousSibling;
           }
@@ -1270,20 +1270,20 @@
                 Math.abs(aEvent.clientY - col.mStartDragY) < 5) {
               return;
             } else {
               col.mDragGesturing = false;
               col.setAttribute("dragging", "true");
               window.addEventListener("click", col._onDragMouseClick, true);
             }
           }
-                    
+
           var pos = {};
           var targetCol = col.parentNode.parentNode._getColumnAtX(aEvent.clientX, 0.5, pos);
-          
+
           // bail if we haven't mousemoved to a different column
           if (col.mTargetCol == targetCol && col.mTargetDir == pos.value)
             return;
 
           var tree = col.parentNode.parentNode;
           var sib;
           var column;
           if (col.mTargetCol) {
@@ -1296,17 +1296,17 @@
             if (sib) {
               sib.removeAttribute("insertafter");
               column = tree.columns.getColumnFor(sib);
               tree.treeBoxObject.invalidateColumn(column);
             }
             col.mTargetCol = null;
             col.mTargetDir = null;
           }
-          
+
           if (targetCol) {
             // set insertbefore/after attributes
             if (pos.value == "after") {
               targetCol.setAttribute("insertafter", "true");
             } else {
               targetCol.setAttribute("insertbefore", "true");
               sib = targetCol._previousVisibleColumn;
               if (sib) {
@@ -1315,25 +1315,25 @@
                 tree.treeBoxObject.invalidateColumn(column);
               }
             }
             column = tree.columns.getColumnFor(targetCol);
             tree.treeBoxObject.invalidateColumn(column);
             col.mTargetCol = targetCol;
             col.mTargetDir = pos.value;
           }
-        ]]></body>        
+        ]]></body>
       </method>
 
       <method name="_onDragMouseUp">
         <parameter name="aEvent"/>
         <body><![CDATA[
           var col = document.treecolDragging;
           if (!col) return;
-          
+
           if (!col.mDragGesturing) {
             if (col.mTargetCol) {
               // remove insertbefore/after attributes
               var before = col.mTargetCol.hasAttribute("insertbefore");
               col.mTargetCol.removeAttribute(before ? "insertbefore" : "insertafter");
 
               var sib = col.mTargetCol._previousVisibleColumn;
               if (before && sib) {
@@ -1356,57 +1356,57 @@
               }
 
               if (move) {
                 col.parentNode.parentNode._reorderColumn(col, col.mTargetCol, before);
               }
 
               // repaint to remove lines
               col.parentNode.parentNode.treeBoxObject.invalidate();
-  
+
               col.mTargetCol = null;
             }
           } else
             col.mDragGesturing = false;
-                    
+
           document.treecolDragging = null;
           col.removeAttribute("dragging");
-          
+
           window.removeEventListener("mousemove", col._onDragMouseMove, true);
           window.removeEventListener("mouseup", col._onDragMouseUp, true);
           // we have to wait for the click event to fire before removing
           // cancelling handler
-          var clickHandler = function(handler) { 
+          var clickHandler = function(handler) {
             window.removeEventListener("click", handler, true);
           };
           window.setTimeout(clickHandler, 0, col._onDragMouseClick);
-        ]]></body>        
+        ]]></body>
       </method>
 
       <method name="_onDragMouseClick">
         <parameter name="aEvent"/>
         <body><![CDATA[
           // prevent click event from firing after column drag and drop
           aEvent.stopPropagation();
           aEvent.preventDefault();
-        ]]></body>        
+        ]]></body>
       </method>
     </implementation>
-    
+
     <handlers>
       <handler event="mousedown" button="0"><![CDATA[
         if (this.parentNode.parentNode.enableColumnDrag) {
           var xulns = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
           var cols = this.parentNode.getElementsByTagNameNS(xulns, "treecol");
-          
+
           // only start column drag operation if there are at least 2 visible columns
           var visible = 0;
           for (var i = 0; i < cols.length; ++i)
             if (cols[i].boxObject.width > 0) ++visible;
-            
+
           if (visible > 1) {
             window.addEventListener("mousemove", this._onDragMouseMove, true);
             window.addEventListener("mouseup", this._onDragMouseUp, true);
             document.treecolDragging = this;
             this.mDragGesturing = true;
             this.mStartDragX = event.clientX;
             this.mStartDragY = event.clientY;
           }
@@ -1449,17 +1449,17 @@
            extends="chrome://global/content/bindings/tree.xml#tree-base">
     <content>
       <xul:image class="tree-columnpicker-icon"/>
       <xul:menupopup anonid="popup">
         <xul:menuseparator anonid="menuseparator"/>
         <xul:menuitem anonid="menuitem" label="&restoreColumnOrder.label;"/>
       </xul:menupopup>
     </content>
-    
+
     <implementation>
       <method name="buildPopup">
         <parameter name="aPopup"/>
         <body>
           <![CDATA[
             // We no longer cache the picker content, remove the old content.
             while (aPopup.childNodes.length > 2)
               aPopup.removeChild(aPopup.firstChild);
--- a/toolkit/content/widgets/wizard.xml
+++ b/toolkit/content/widgets/wizard.xml
@@ -14,45 +14,45 @@
    xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
    xmlns:xbl="http://www.mozilla.org/xbl">
 
   <binding id="wizard-base">
     <resources>
       <stylesheet src="chrome://global/skin/wizard.css"/>
     </resources>
   </binding>
-  
+
   <binding id="wizard" extends="chrome://global/content/bindings/general.xml#root-element">
     <resources>
       <stylesheet src="chrome://global/skin/wizard.css"/>
     </resources>
     <content>
       <xul:hbox class="wizard-header" anonid="Header"/>
-      
+
       <xul:deck class="wizard-page-box" flex="1" anonid="Deck">
         <children includes="wizardpage"/>
       </xul:deck>
       <children/>
-      
+
       <xul:hbox class="wizard-buttons" anonid="Buttons" xbl:inherits="pagestep,firstpage,lastpage"/>
     </content>
-    
+
     <implementation>
       <property name="title" onget="return document.title;"
                              onset="return document.title = val;"/>
 
       <property name="canAdvance" onget="return this._canAdvance;"
                                   onset="this._nextButton.disabled = !val; return this._canAdvance = val;"/>
       <property name="canRewind" onget="return this._canRewind;"
                                  onset="this._backButton.disabled = !val; return this._canRewind = val;"/>
 
       <property name="pageStep" readonly="true" onget="return this._pageStack.length"/>
 
       <field name="pageCount">0</field>
-      
+
       <field name="_accessMethod">null</field>
       <field name="_pageStack">null</field>
       <field name="_currentPage">null</field>
 
       <property name="wizardPages">
         <getter>
         <![CDATA[
           var xulns = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
@@ -61,55 +61,55 @@
         </getter>
       </property>
 
       <property name="currentPage" onget="return this._currentPage">
         <setter>
         <![CDATA[
           if (!val)
             return val;
-            
+
           this._currentPage = val;
 
           // Setting this attribute allows wizard's clients to dynamically
-          // change the styles of each page based on purpose of the page. 
+          // change the styles of each page based on purpose of the page.
           this.setAttribute("currentpageid", val.pageid);
 
           let { AppConstants } =
-              Components.utils.import("resource://gre/modules/AppConstants.jsm", {}); 
+              Components.utils.import("resource://gre/modules/AppConstants.jsm", {});
 
           if (this.onFirstPage) {
             this.canRewind = false;
             this.setAttribute("firstpage", "true");
             if (AppConstants.XP_UNIX && AppConstants.platform != "macosx") {
               this._backButton.setAttribute('hidden', 'true');
             }
           } else {
             this.canRewind = true;
             this.setAttribute("firstpage", "false");
             if (AppConstants.XP_UNIX && AppConstants.platform != "macosx") {
               this._backButton.setAttribute('hidden', 'false');
             }
           }
-                    
+
           if (this.onLastPage) {
             this.canAdvance = true;
             this.setAttribute("lastpage", "true");
           } else {
             this.setAttribute("lastpage", "false");
           }
 
           this._deck.setAttribute("selectedIndex", val.pageIndex);
           this._advanceFocusToPage(val);
 
           this._adjustWizardHeader();
           this._wizardButtons.onPageChange();
 
           this._fireEvent(val, "pageshow");
-          
+
           return val;
         ]]>
         </setter>
       </property>
 
       <property name="pageIndex"
                 onget="return this._currentPage ? this._currentPage.pageIndex : -1;">
         <setter>
@@ -163,77 +163,77 @@
       <field name="_cancelFunc">(function() { document.documentElement.cancel(); })</field>
       <field name="_extra1Func">(function() { document.documentElement.extra1(); })</field>
       <field name="_extra2Func">(function() { document.documentElement.extra2(); })</field>
 
       <field name="_closeHandler">(function(event) {
         if (document.documentElement.cancel())
           event.preventDefault();
       })</field>
-       
+
       <constructor><![CDATA[
         this._canAdvance = true;
         this._canRewind = false;
         this._hasLoaded = false;
-        
+
         this._pageStack = [];
-        
+
         try {
           // need to create string bundle manually instead of using <xul:stringbundle/>
           // see bug 63370 for details
           this._bundle = Components.classes["@mozilla.org/intl/stringbundle;1"]
                                    .getService(Components.interfaces.nsIStringBundleService)
                                    .createBundle("chrome://global/locale/wizard.properties");
         } catch (e) {
           // This fails in remote XUL, which has to provide titles for all pages
           // see bug 142502
         }
-        
+
         // get anonymous content references
         this._wizardHeader = document.getAnonymousElementByAttribute(this, "anonid", "Header");
         this._wizardButtons = document.getAnonymousElementByAttribute(this, "anonid", "Buttons");
         this._deck = document.getAnonymousElementByAttribute(this, "anonid", "Deck");
-        
+
         this._initWizardButton("back");
         this._initWizardButton("next");
         this._initWizardButton("finish");
         this._initWizardButton("cancel");
         this._initWizardButton("extra1");
         this._initWizardButton("extra2");
-        
+
         this._initPages();
-        
+
         window.addEventListener("close", this._closeHandler, false);
-        
+
         // start off on the first page
         this.pageCount = this.wizardPages.length;
         this.advance();
-        
+
         // give focus to the first focusable element in the dialog
         window.addEventListener("load", this._setInitialFocus, false);
       ]]></constructor>
 
       <method name="getPageById">
         <parameter name="aPageId"/>
         <body><![CDATA[
           var els = this.getElementsByAttribute("pageid", aPageId);
           return els.item(0);
         ]]></body>
       </method>
-      
+
       <method name="extra1">
         <body><![CDATA[
-          if (this.currentPage) 
+          if (this.currentPage)
             this._fireEvent(this.currentPage, "extra1");
         ]]></body>
       </method>
 
       <method name="extra2">
         <body><![CDATA[
-          if (this.currentPage) 
+          if (this.currentPage)
             this._fireEvent(this.currentPage, "extra2");
         ]]></body>
       </method>
 
       <method name="rewind">
         <body><![CDATA[
           if (!this.canRewind)
             return;
@@ -241,94 +241,94 @@
           if (this.currentPage && !this._fireEvent(this.currentPage, "pagehide"))
             return;
 
           if (this.currentPage && !this._fireEvent(this.currentPage, "pagerewound"))
             return;
 
           if (!this._fireEvent(this, "wizardback"))
             return;
-            
-            
+
+
           this._pageStack.pop();
           this.currentPage = this._pageStack[this._pageStack.length-1];
           this.setAttribute("pagestep", this._pageStack.length);
         ]]></body>
       </method>
 
       <method name="advance">
         <parameter name="aPageId"/>
         <body><![CDATA[
           if (!this.canAdvance)
-            return; 
-            
+            return;
+
           if (this.currentPage && !this._fireEvent(this.currentPage, "pagehide"))
             return;
-            
+
           if (this.currentPage && !this._fireEvent(this.currentPage, "pageadvanced"))
             return;
 
           if (this.onLastPage && !aPageId) {
             if (this._fireEvent(this, "wizardfinish"))
               window.setTimeout(function() {window.close();}, 1);
           } else {
             if (!this._fireEvent(this, "wizardnext"))
-              return; 
-            
+              return;
+
             var page;
             if (aPageId)
               page = this.getPageById(aPageId);
             else {
               if (this.currentPage) {
                 if (this._accessMethod == "random")
                   page = this.getPageById(this.currentPage.next);
                 else
                   page = this.wizardPages[this.currentPage.pageIndex+1];
               } else
                 page = this.wizardPages[0];
             }
 
             if (page) {
               this._pageStack.push(page);
               this.setAttribute("pagestep", this._pageStack.length);
-  
+
               this.currentPage = page;
             }
           }
         ]]></body>
       </method>
-      
+
       <method name="goTo">
         <parameter name="aPageId"/>
         <body><![CDATA[
           var page = this.getPageById(aPageId);
           if (page) {
             this._pageStack[this._pageStack.length-1] = page;
             this.currentPage = page;
           }
         ]]></body>
       </method>
-              
+
       <method name="cancel">
         <body><![CDATA[
           if (!this._fireEvent(this, "wizardcancel"))
             return true;
 
           window.close();
           window.setTimeout(function() {window.close();}, 1);
           return false;
         ]]></body>
       </method>
-      
+
       <method name="_setInitialFocus">
         <parameter name="aEvent"/>
         <body>
         <![CDATA[
           document.documentElement._hasLoaded = true;
-          var focusInit = 
+          var focusInit =
             function() {
               // give focus to the first focusable element in the dialog
               if (!document.commandDispatcher.focusedElement)
                 document.commandDispatcher.advanceFocusIntoSubtree(document.documentElement);
 
               try {
                 var button =
                       document.documentElement._wizardButtons.defaultButton;
@@ -336,35 +336,35 @@
                   window.notifyDefaultButtonLoaded(button);
               } catch (e) { }
             };
 
           // Give focus after onload completes, see bug 103197.
           setTimeout(focusInit, 0);
         ]]>
         </body>
-      </method>                
+      </method>
 
       <method name="_advanceFocusToPage">
         <parameter name="aPage"/>
         <body>
         <![CDATA[
           if (!this._hasLoaded)
             return;
-            
+
           document.commandDispatcher.advanceFocusIntoSubtree(aPage);
-          
+
           // if advanceFocusIntoSubtree tries to focus one of our
           // dialog buttons, then remove it and put it on the root
           var focused = document.commandDispatcher.focusedElement;
           if (focused && focused.hasAttribute("dlgtype"))
             this.focus();
         ]]>
         </body>
-      </method>                
+      </method>
 
       <method name="_initPages">
         <body><![CDATA[
           var meth = "sequential";
           var pages = this.wizardPages;
           for (var i = 0; i < pages.length; ++i) {
             var page = pages[i];
             page.pageIndex = i;
@@ -422,20 +422,20 @@
 
       <method name="_fireEvent">
         <parameter name="aTarget"/>
         <parameter name="aType"/>
         <body>
         <![CDATA[
           var event = document.createEvent("Events");
           event.initEvent(aType, true, true);
-          
+
           // handle dom event handlers
           var noCancel = aTarget.dispatchEvent(event);
-          
+
           // handle any xml attribute event handlers
           var handler = aTarget.getAttribute("on"+aType);
           if (handler != "") {
             var fn = new Function("event", handler);
             var returned = fn.apply(aTarget, [event]);
             if (returned == false)
               noCancel = false;
           }
@@ -455,17 +455,17 @@
           this.cancel();
       </handler>
     </handlers>
   </binding>
 
   <binding id="wizardpage" extends="chrome://global/content/bindings/wizard.xml#wizard-base">
     <implementation>
       <field name="pageIndex">-1</field>
-      
+
       <property name="pageid" onget="return this.getAttribute('pageid');"
                               onset="this.setAttribute('pageid', val);"/>
 
       <property name="next"   onget="return this.getAttribute('next');"
                               onset="this.setAttribute('next', val);
                                      this.parentNode._accessMethod = 'random';
                                      return val;"/>
     </implementation>
@@ -482,24 +482,24 @@
         </xul:vbox>
         <xul:hbox class="wizard-header-box-icon">
           <xul:spacer flex="1"/>
           <xul:image class="wizard-header-icon" xbl:inherits="src=iconsrc"/>
         </xul:hbox>
       </xul:stack>
     </content>
   </binding>
-  
+
   <binding id="wizard-buttons" extends="chrome://global/content/bindings/wizard.xml#wizard-base">
     <content>
       <xul:vbox flex="1">
         <xul:hbox class="wizard-buttons-btm">
           <xul:button class="wizard-button" dlgtype="extra1" hidden="true"/>
           <xul:button class="wizard-button" dlgtype="extra2" hidden="true"/>
-          <xul:button label="&button-cancel-mac.label;" class="wizard-button" dlgtype="cancel"/>        
+          <xul:button label="&button-cancel-mac.label;" class="wizard-button" dlgtype="cancel"/>
           <xul:spacer flex="1"/>
           <xul:button label="&button-back-mac.label;" accesskey="&button-back-mac.accesskey;"
                       class="wizard-button wizard-nav-button" dlgtype="back"/>
           <xul:button label="&button-next-mac.label;" accesskey="&button-next-mac.accesskey;"
                       class="wizard-button wizard-nav-button" dlgtype="next"
                       default="true" xbl:inherits="hidden=lastpage" />
           <xul:button label="&button-finish-mac.label;" class="wizard-button"
                       dlgtype="finish" default="true" xbl:inherits="hidden=hidefinishbutton" />
@@ -525,17 +525,17 @@
         <xul:vbox class="wizard-header-box-text" flex="1">
           <xul:label class="wizard-header-label" xbl:inherits="xbl:text=label"/>
           <xul:label class="wizard-header-description" xbl:inherits="xbl:text=description"/>
         </xul:vbox>
         <xul:image class="wizard-header-icon" xbl:inherits="src=iconsrc"/>
       </xul:hbox>
     </content>
   </binding>
-  
+
   <binding id="wizard-buttons" extends="chrome://global/content/bindings/wizard.xml#wizard-base">
     <content>
       <xul:vbox class="wizard-buttons-box-1" flex="1">
         <xul:separator class="wizard-buttons-separator groove"/>
         <xul:hbox class="wizard-buttons-box-2">
           <xul:button class="wizard-button" dlgtype="extra1" hidden="true"/>
           <xul:button class="wizard-button" dlgtype="extra2" hidden="true"/>
           <xul:spacer flex="1" anonid="spacer"/>
@@ -543,50 +543,50 @@
           <xul:button label="&button-cancel-unix.label;" class="wizard-button"
                       dlgtype="cancel" icon="cancel"/>
           <xul:spacer style="width: 24px"/>
           <xul:button label="&button-back-unix.label;" accesskey="&button-back-unix.accesskey;"
                       class="wizard-button" dlgtype="back" icon="go-back"/>
           <xul:deck class="wizard-next-deck" anonid="WizardButtonDeck">
             <xul:hbox>
               <xul:button label="&button-finish-unix.label;" class="wizard-button"
-                          dlgtype="finish" default="true" flex="1"/> 
+                          dlgtype="finish" default="true" flex="1"/>
             </xul:hbox>
             <xul:hbox>
               <xul:button label="&button-next-unix.label;" accesskey="&button-next-unix.accesskey;"
-                          class="wizard-button" dlgtype="next" icon="go-forward" 
+                          class="wizard-button" dlgtype="next" icon="go-forward"
                           default="true" flex="1"/>
             </xul:hbox>
           </xul:deck>
 #else
           <xul:button label="&button-back-win.label;" accesskey="&button-back-win.accesskey;"
                       class="wizard-button" dlgtype="back" icon="go-back"/>
           <xul:deck class="wizard-next-deck" anonid="WizardButtonDeck">
             <xul:hbox>
               <xul:button label="&button-finish-win.label;" class="wizard-button"
-                          dlgtype="finish" default="true" flex="1"/> 
+                          dlgtype="finish" default="true" flex="1"/>
             </xul:hbox>
             <xul:hbox>
               <xul:button label="&button-next-win.label;" accesskey="&button-next-win.accesskey;"
-                          class="wizard-button" dlgtype="next" icon="go-forward" 
+                          class="wizard-button" dlgtype="next" icon="go-forward"
                           default="true" flex="1"/>
             </xul:hbox>
           </xul:deck>
           <xul:button label="&button-cancel-win.label;" class="wizard-button"
-                      dlgtype="cancel" icon="cancel"/> 
+                      dlgtype="cancel" icon="cancel"/>
 #endif
         </xul:hbox>
       </xul:vbox>
     </content>
-    
+
     <implementation>
       <field name="_wizardButtonDeck" readonly="true">
         document.getAnonymousElementByAttribute(this, "anonid", "WizardButtonDeck");
       </field>
-      
+
       <method name="onPageChange">
         <body><![CDATA[
           if (this.getAttribute("lastpage") == "true") {
             this._wizardButtonDeck.setAttribute("selectedIndex", 0);
           } else {
             this._wizardButtonDeck.setAttribute("selectedIndex", 1);
           }
         ]]></body>
--- a/toolkit/identity/tests/unit/test_log_utils.js
+++ b/toolkit/identity/tests/unit/test_log_utils.js
@@ -55,17 +55,17 @@ function test_reportError() {
 
 function test_wrappers() {
   logAlias("I like potatoes");
   do_test_finished();
   reportErrorAlias("Too much red bull");
 }
 
 var TESTS = [
-// XXX fix me 
+// XXX fix me
 //    toggle_debug,
     test_log,
     test_reportError,
     test_wrappers,
 ];
 
 TESTS.forEach(add_test);
 
--- a/toolkit/modules/CertUtils.jsm
+++ b/toolkit/modules/CertUtils.jsm
@@ -197,17 +197,17 @@ BadCertHandler.prototype = {
       return;
     }
 
     // make sure the certificate of the old channel checks out before we follow
     // a redirect from it.  See bug 340198.
     // Don't call checkCert for internal redirects. See bug 569648.
     if (!(flags & Ci.nsIChannelEventSink.REDIRECT_INTERNAL))
       checkCert(oldChannel);
-    
+
     callback.onRedirectVerifyCallback(Components.results.NS_OK);
   },
 
   // nsIInterfaceRequestor
   getInterface: function(iid) {
     return this.QueryInterface(iid);
   },
 
--- a/toolkit/modules/debug.js
+++ b/toolkit/modules/debug.js
@@ -12,17 +12,17 @@ this.EXPORTED_SYMBOLS = ["NS_ASSERT"];
 
 var gTraceOnAssert = true;
 
 /**
  * This function provides a simple assertion function for JavaScript.
  * If the condition is true, this function will do nothing.  If the
  * condition is false, then the message will be printed to the console
  * and an alert will appear showing a stack trace, so that the (alpha
- * or nightly) user can file a bug containing it.  For future enhancements, 
+ * or nightly) user can file a bug containing it.  For future enhancements,
  * see bugs 330077 and 330078.
  *
  * To suppress the dialogs, you can run with the environment variable
  * XUL_ASSERT_PROMPT set to 0 (if unset, this defaults to 1).
  *
  * @param condition represents the condition that we're asserting to be
  *                  true when we call this function--should be
  *                  something that can be evaluated as a boolean.
--- a/toolkit/modules/tests/xpcshell/test_Promise.js
+++ b/toolkit/modules/tests/xpcshell/test_Promise.js
@@ -904,17 +904,17 @@ tests.push(
   }));
 
 // Test deadlock in Promise.jsm with nested event loops
 // The scenario being tested is:
 // promise_1.then({
 //   do some work that will asynchronously signal done
 //   start an event loop waiting for the done signal
 // }
-// where the async work uses resolution of a second promise to 
+// where the async work uses resolution of a second promise to
 // trigger the "done" signal. While this would likely work in a
 // naive implementation, our constant-stack implementation needs
 // a special case to avoid deadlock. Note that this test is
 // sensitive to the implementation-dependent order in which then()
 // clauses for two different promises are executed, so it is
 // possible for other implementations to pass this test and still
 // have similar deadlocks.
 tests.push(
--- a/toolkit/mozapps/downloads/content/download.xml
+++ b/toolkit/mozapps/downloads/content/download.xml
@@ -33,34 +33,34 @@
         ]]>
         </getter>
       </property>
       <property name="inProgress">
         <getter>
         <![CDATA[
           var state = parseInt(this.getAttribute("state"));
           const dl = Components.interfaces.nsIDownloadManager;
-          return state == dl.DOWNLOAD_NOTSTARTED || 
+          return state == dl.DOWNLOAD_NOTSTARTED ||
                  state == dl.DOWNLOAD_QUEUED ||
-                 state == dl.DOWNLOAD_DOWNLOADING || 
+                 state == dl.DOWNLOAD_DOWNLOADING ||
                  state == dl.DOWNLOAD_PAUSED ||
                  state == dl.DOWNLOAD_SCANNING;
         ]]>
         </getter>
       </property>
       <property name="removable">
         <getter>
         <![CDATA[
           var state = parseInt(this.getAttribute("state"));
           const dl = Components.interfaces.nsIDownloadManager;
-          return state == dl.DOWNLOAD_FINISHED || 
-                 state == dl.DOWNLOAD_CANCELED || 
-                 state == dl.DOWNLOAD_BLOCKED_PARENTAL || 
-                 state == dl.DOWNLOAD_BLOCKED_POLICY || 
-                 state == dl.DOWNLOAD_DIRTY || 
+          return state == dl.DOWNLOAD_FINISHED ||
+                 state == dl.DOWNLOAD_CANCELED ||
+                 state == dl.DOWNLOAD_BLOCKED_PARENTAL ||
+                 state == dl.DOWNLOAD_BLOCKED_POLICY ||
+                 state == dl.DOWNLOAD_DIRTY ||
                  state == dl.DOWNLOAD_FAILED;
         ]]>
         </getter>
       </property>
       <property name="buttons">
         <getter>
         <![CDATA[
           var startEl = document.getAnonymousNodes(this);
@@ -69,17 +69,17 @@
 
           const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
           return startEl[0].getElementsByTagNameNS(XULNS, "button");
         ]]>
         </getter>
       </property>
     </implementation>
   </binding>
-  
+
   <binding id="download-starting" extends="chrome://mozapps/content/downloads/download.xml#download-base">
     <content>
       <xul:hbox flex="1">
         <xul:vbox pack="center">
           <xul:image class="downloadTypeIcon" validate="always"
                      xbl:inherits="src=image"/>
         </xul:vbox>
         <xul:vbox pack="start" flex="1">
@@ -91,19 +91,19 @@
           <xul:spacer flex="1"/>
         </xul:vbox>
         <xul:vbox pack="center">
           <xul:button class="cancel mini-button" tooltiptext="&cmd.cancel.label;"
                       cmd="cmd_cancel" ondblclick="event.stopPropagation();"
                       oncommand="performCommand('cmd_cancel', this);"/>
         </xul:vbox>
       </xul:hbox>
-    </content>  
+    </content>
   </binding>
-  
+
   <binding id="download-downloading" extends="chrome://mozapps/content/downloads/download.xml#download-base">
     <content>
       <xul:hbox flex="1" class="downloadContentBox">
         <xul:vbox pack="center">
           <xul:image class="downloadTypeIcon" validate="always"
                      xbl:inherits="src=image"/>
         </xul:vbox>
         <xul:vbox flex="1">
@@ -124,17 +124,17 @@
           </xul:hbox>
           <xul:label xbl:inherits="value=status,tooltiptext=statusTip" flex="1"
                      crop="right" class="status"/>
           <xul:spacer flex="1"/>
         </xul:vbox>
       </xul:hbox>
     </content>
   </binding>
-  
+
   <binding id="download-paused" extends="chrome://mozapps/content/downloads/download.xml#download-base">
     <content>
       <xul:hbox flex="1">
         <xul:vbox pack="center">
           <xul:image class="downloadTypeIcon" validate="always"
                      xbl:inherits="src=image"/>
         </xul:vbox>
         <xul:vbox flex="1">
@@ -155,17 +155,17 @@
           </xul:hbox>
           <xul:label xbl:inherits="value=status,tooltiptext=statusTip" flex="1"
                      crop="right" class="status"/>
           <xul:spacer flex="1"/>
         </xul:vbox>
       </xul:hbox>
     </content>
   </binding>
-  
+
   <binding id="download-done" extends="chrome://mozapps/content/downloads/download.xml#download-base">
     <content>
       <xul:hbox flex="1">
         <xul:vbox pack="center">
           <xul:image class="downloadTypeIcon" validate="always"
                      xbl:inherits="src=image"/>
         </xul:vbox>
         <xul:vbox pack="start" flex="1">
@@ -176,19 +176,19 @@
                        class="dateTime"/>
           </xul:hbox>
           <xul:hbox align="center" flex="1">
             <xul:label xbl:inherits="value=status,tooltiptext=statusTip"
                        crop="end" flex="1" class="status"/>
           </xul:hbox>
         </xul:vbox>
       </xul:hbox>
-    </content>  
+    </content>
   </binding>
-  
+
   <binding id="download-canceled" extends="chrome://mozapps/content/downloads/download.xml#download-base">
     <content>
       <xul:hbox flex="1">
         <xul:vbox pack="center">
           <xul:image class="downloadTypeIcon" validate="always"
                      xbl:inherits="src=image"/>
         </xul:vbox>
         <xul:vbox pack="start" flex="1">
@@ -202,19 +202,19 @@
             <xul:label xbl:inherits="value=status,tooltiptext=statusTip"
                        crop="end" flex="1" class="status"/>
             <xul:button class="retry mini-button" tooltiptext="&cmd.retry.label;"
                         cmd="cmd_retry" ondblclick="event.stopPropagation();"
                         oncommand="performCommand('cmd_retry', this);"/>
           </xul:hbox>
         </xul:vbox>
       </xul:hbox>
-    </content>  
+    </content>
   </binding>
-  
+
   <binding id="download-failed" extends="chrome://mozapps/content/downloads/download.xml#download-base">
     <content>
       <xul:hbox flex="1">
         <xul:vbox pack="center">
           <xul:image class="downloadTypeIcon" validate="always"
                      xbl:inherits="src=image"/>
         </xul:vbox>
         <xul:vbox pack="start" flex="1">
@@ -228,17 +228,17 @@
             <xul:label xbl:inherits="value=status,tooltiptext=statusTip"
                        crop="end" flex="1" class="status"/>
             <xul:button class="retry mini-button" tooltiptext="&cmd.retry.label;"
                         cmd="cmd_retry" ondblclick="event.stopPropagation();"
                         oncommand="performCommand('cmd_retry', this);"/>
           </xul:hbox>
         </xul:vbox>
       </xul:hbox>
-    </content>  
+    </content>
   </binding>
 
   <binding id="download-blocked-parental" extends="chrome://mozapps/content/downloads/download.xml#download-base">
     <content>
       <xul:hbox flex="1">
         <xul:vbox pack="center">
           <xul:image class="downloadTypeIcon blockedIcon"/>
         </xul:vbox>
@@ -294,17 +294,17 @@
             <xul:vbox flex="1">
               <xul:progressmeter mode="undetermined" flex="1" />
             </xul:vbox>
           </xul:hbox>
           <xul:label value="&scanning.label;" class="status"/>
           <xul:spacer flex="1"/>
         </xul:vbox>
       </xul:hbox>
-    </content>  
+    </content>
   </binding>
 
   <binding id="download-dirty" extends="chrome://mozapps/content/downloads/download.xml#download-base">
     <content>
       <xul:hbox flex="1">
         <xul:vbox pack="center">
           <xul:image class="downloadTypeIcon blockedIcon"/>
         </xul:vbox>
--- a/toolkit/mozapps/downloads/content/downloads.js
+++ b/toolkit/mozapps/downloads/content/downloads.js
@@ -1232,17 +1232,17 @@ function prependList(aDownload)
     maxBytes: aDownload.size
   };
 
   // Make the item and add it to the beginning
   let item = createDownloadItem(attrs);
   if (item) {
     // Add item to the beginning
     gDownloadsView.insertBefore(item, gDownloadsView.firstChild);
-    
+
     // Because of the joys of XBL, we can't update the buttons until the
     // download object is in the document.
     updateButtons(item);
 
     // We might have added an item to an empty list, so update button
     updateClearListButton();
   }
 }
--- a/toolkit/mozapps/downloads/content/helperApps.js
+++ b/toolkit/mozapps/downloads/content/helperApps.js
@@ -2,17 +2,17 @@
 
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 var Cc = Components.classes;
 var Ci = Components.interfaces;
 
-var gRDF;    
+var gRDF;
 
 const CLASS_MIMEINFO        = "mimetype";
 const CLASS_PROTOCOLINFO    = "scheme";
 
 // namespace prefix
 const NC_NS                 = "http://home.netscape.com/NC-rdf#";
 
 // type list properties
@@ -69,22 +69,22 @@ ArrayEnumerator.prototype = {
   push: function (aElement) {
     if (aElement)
       this._contents.push(aElement);
   }
 };
 
 function HelperApps()
 {
-  if (!gRDF) 
+  if (!gRDF)
     gRDF = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
-  
+
   const mimeTypes = "UMimTyp";
   var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties);
-  
+
   var file = fileLocator.get(mimeTypes, Components.interfaces.nsIFile);
 
   var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
   var fileHandler = ioService.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler);
   this._inner = gRDF.GetDataSourceBlocking(fileHandler.getURLSpecFromFile(file));
   this._inner.AddObserver(this);
 
   this._fileTypeArc       = gRDF.GetResource(NC_URI("FileType"));
@@ -102,60 +102,60 @@ HelperApps.prototype = {
   mimeHandlerExists: function (aMIMEType)
   {
     var valueProperty = gRDF.GetUnicodeResource(NC_URI("value"));
     var mimeSource = gRDF.GetUnicodeResource(MIME_URI(aMIMEType));
     var mimeLiteral = gRDF.GetLiteral(aMIMEType);
     return this._inner.HasAssertion(mimeSource, valueProperty, mimeLiteral, true);
   },
 
-  updateTypeInfo: function (aMIMEInfo) 
+  updateTypeInfo: function (aMIMEInfo)
   {
     var mimeType = aMIMEInfo.MIMEType;
     var isNewMIMEType = this.mimeHandlerExists(mimeType);
     var entry = new HandlerOverride(MIME_URI(mimeType), this._inner);
     entry.mimeType    = mimeType;
     entry.isEditable  = true;
     entry.alwaysAsk = aMIMEInfo.alwaysAskBeforeHandling;
-    
+
     // If not updating (i.e., a newly encountered mime type),
     // then update extension list and description.
     if (!isNewMIMEType) {
       var extEnumerator = aMIMEInfo.getFileExtensions();
       while (extEnumerator.hasMore()) {
           entry.addExtension(extEnumerator.getNext());
       }
       entry.description = aMIMEInfo.description;
       entry.appDisplayName = "";
     }
-    
+
     const nsIMIMEInfo = Components.interfaces.nsIMIMEInfo;
     if (aMIMEInfo.preferredAction == nsIMIMEInfo.saveToDisk) {
       entry.saveToDisk = true;
       if (!isNewMIMEType) {
         // Creating a new entry, set path.
         entry.appPath = "";
       }
-    } 
+    }
     else if (aMIMEInfo.preferredAction == nsIMIMEInfo.useSystemDefault ||
              aMIMEInfo.preferredApplicationHandler == null) {
       entry.useSystemDefault = true;
       if (!isNewMIMEType) {
         // Creating a new entry, set path.
         entry.appPath = "";
       }
-    } 
+    }
     else if (aMIMEInfo.preferredApplicationHandler instanceof Components.interfaces.nsILocalHandlerApp) {
       entry.saveToDisk       = false;
       entry.useSystemDefault = false;
       entry.handleInternal   = false;
       entry.appPath = aMIMEInfo.preferredApplicationHandler.executable.path;
       entry.appDisplayName = aMIMEInfo.preferredApplicationHandler.name;
     }
-    
+
     // Do RDF magic.
     entry.buildLinks();
     this.flush();
   },
 
   getLiteralValue: function (aResource, aProperty)
   {
     var res = gRDF.GetResource(aResource);
@@ -167,43 +167,43 @@ HelperApps.prototype = {
     }
     return "";
   },
 
   /* nsIRDFDataSource */
   get URI() {
     return this._inner.URI;
   },
-  
+
   GetSource: function (aProperty, aTarget, aTruthValue) {
     return this._inner.GetSource(aProperty, aTarget, aTruthValue);
   },
   GetSources: function (aProperty, aTarget, aTruthValue) {
     return this._inner.GetSources(aProperty, aTarget, aTruthValue);
-  },         
-  
+  },
+
   _isRootTypeResource: function (aResource) {
-    aResource = aResource.QueryInterface(Components.interfaces.nsIRDFResource);  
+    aResource = aResource.QueryInterface(Components.interfaces.nsIRDFResource);
     const kRootTypePrefix = "urn:mimetype:";
     return (aResource.Value.substr(0, kRootTypePrefix.length) == kRootTypePrefix);
   },
-  
+
   getMIMEInfo: function (aResource) {
     var types = this._inner.GetTarget(aResource, this._valueArc, true);
     if (types) {
       types = types.QueryInterface(Components.interfaces.nsIRDFLiteral);
       types = types.Value.split(", ");
 
       mimeSvc = Components.classes["@mozilla.org/mime;1"].getService(Components.interfaces.nsIMIMEService);
       return mimeSvc.getFromTypeAndExtension(types[0], null);
     }
-    
+
     return null;
   },
-   
+
   GetTarget: function (aSource, aProperty, aTruthValue) {
     if (this._isRootTypeResource(aSource)) {
       var typeInfo = this.getMIMEInfo(aSource);
       if (typeInfo) {
         var bundle = document.getElementById("strings");
         if (aProperty.EqualsNode(this._handleAutoArc)) {
           let handler = this.GetTarget(aSource, this._handlerPropArc, true);
           if (handler) {
@@ -212,19 +212,19 @@ HelperApps.prototype = {
           }
         }
         else if (aProperty.EqualsNode(this._fileTypeArc)) {
           if (typeInfo.description == "") {
             try {
               var literal = bundle.getFormattedString("fileEnding", [typeInfo.primaryExtension.toUpperCase()]);
               return gRDF.GetLiteral(literal);
             }
-            catch (e) { 
+            catch (e) {
               // Wow, this sucks, just show the MIME type as a last ditch effort to display
-              // the type of file that this is. 
+              // the type of file that this is.
               return gRDF.GetLiteral(typeInfo.MIMEType);
             }
           }
           return gRDF.GetLiteral(typeInfo.description);
         }
         else if (aProperty.EqualsNode(this._fileHandlerArc)) {
           let handler = this.GetTarget(aSource, this._handlerPropArc, true);
           if (handler) {
@@ -236,18 +236,18 @@ HelperApps.prototype = {
             else if (this.getLiteralValue(handler.Value, "useSystemDefault") == "false") {
               var extApp = this.GetTarget(handler, this._externalAppArc, true);
               if (extApp) {
                 extApp = extApp.QueryInterface(Components.interfaces.nsIRDFResource);
                 var openWith = bundle.getFormattedString("openWith", [this.getLiteralValue(extApp.Value, "prettyName")]);
                 return gRDF.GetLiteral(openWith);
               }
             }
-          }     
-          
+          }
+
           var openWith2 = bundle.getFormattedString("openWith", [typeInfo.defaultDescription]);
           return gRDF.GetLiteral(openWith2);
         }
         else if (aProperty.EqualsNode(this._fileIconArc)) {
           try {
             return gRDF.GetLiteral("moz-icon://goat." + typeInfo.primaryExtension + "?size=16");
           }
           catch (e) {
@@ -258,42 +258,42 @@ HelperApps.prototype = {
           try {
             return gRDF.GetLiteral(typeInfo.primaryExtension.toUpperCase());
           }
           catch (e) { }
           return gRDF.GetLiteral("");
         }
         else if (aProperty.EqualsNode(this._fileExtensionsArc)) {
           var extns = typeInfo.getFileExtensions();
-          
+
           // Prevent duplicates.
           var hash = { };
           while (extns.hasMore())
             hash[extns.getNext().toUpperCase()] = 0;
-          
+
           var str = "";
           for (var extn in hash)
             str += extn + ",";
           str = str.substring(0, str.length - 1);
 
           return gRDF.GetLiteral(str);
         }
       }
     }
 
     return this._inner.GetTarget(aSource, aProperty, aTruthValue);
-  },      
-  
+  },
+
   GetTargets: function (aSource, aProperty, aTruthValue) {
-    if (this._isRootTypeResource(aSource)) { 
+    if (this._isRootTypeResource(aSource)) {
       return new ArrayEnumerator([this.GetTarget(aSource, aProperty, aTruthValue)]);
     }
-    
+
     return this._inner.GetTargets(aSource, aProperty, aTruthValue);
-  }, 
+  },
   Assert: function (aSource, aProperty, aTarget, aTruthValue) {
     return this._inner.Assert(aSource, aProperty, aTarget, aTruthValue);
   },
   Unassert: function (aSource, aProperty, aTarget) {
     return this._inner.Unassert(aSource, aProperty, aTarget);
   },
   Change: function (aSource, aProperty, aOldTarget, aNewTarget) {
     if (aOldTarget)
@@ -305,17 +305,17 @@ HelperApps.prototype = {
   },
   Move: function (aOldSource, aNewSource, aProperty, aTarget) {
     return this._inner.Assert(aOldSource, aNewSource, aProperty, aTarget);
   },
   HasAssertion: function (aSource, aProperty, aTarget, aTruthValue) {
     if (this._isRootTypeResource(aSource)) {
       // Don't show entries in the list for types that we DO NOT handle
       // automatically. i.e. this list is a means of editing and removing
-      // automatic overrides only. 
+      // automatic overrides only.
       if (aProperty.EqualsNode(this._handleAutoArc)) {
         var handler = this.GetTarget(aSource, this._handlerPropArc, true);
         if (handler) {
           handler = handler.QueryInterface(Components.interfaces.nsIRDFResource);
           return !(this.getLiteralValue(handler.Value, "alwaysAsk") == "true");
         }
       }
     }
@@ -331,85 +331,85 @@ HelperApps.prototype = {
     return this._inner.GetAllResources();
   },
   hasArcIn: function (aNode, aArc) {
     return this._inner.hasArcIn(aNode, aArc);
   },
   hasArcOut: function (aNode, aArc) {
     return this._inner.hasArcOut(aNode, aArc);
   },
-  
+
   _observers: [],
   AddObserver: function (aObserver) {
     this._observers.push(aObserver);
   },
-  
+
   RemoveObserver: function (aObserver) {
     for (var i = 0; i < this._observers.length; ++i) {
       if (this._observers[i] == aObserver) {
         this._observers.splice(i, 1);
         break;
       }
     }
   },
-  
+
   onAssert: function (aDataSource, aSource, aProperty, aTarget) {
     for (var i = 0; i < this._observers.length; ++i) {
       this._observers[i].onAssert(aDataSource, aSource, aProperty, aTarget);
     }
   },
 
   onUnassert: function (aDataSource, aSource, aProperty, aTarget) {
     for (var i = 0; i < this._observers.length; ++i) {
       this._observers[i].onUnassert(aDataSource, aSource, aProperty, aTarget);
     }
   },
-  
+
   onChange: function (aDataSource, aSource, aProperty, aOldTarget, aNewTarget) {
     for (var i = 0; i < this._observers.length; ++i) {
       this._observers[i].onChange(aDataSource, aSource, aProperty, aOldTarget, aNewTarget);
     }
   },
-  
+
   onMove: function (aDataSource, aOldSource, aNewSource, aProperty, aTarget) {
     for (var i = 0; i < this._observers.length; ++i) {
       this._observers[i].onMove(aDataSource, aOldSource, aNewSource, aProperty, aTarget);
     }
   },
-  
+
   onBeginUpdateBatch: function (aDataSource) {
     for (var i = 0; i < this._observers.length; ++i) {
       this._observers[i].onBeginUpdateBatch(aDataSource);
     }
   },
-  
+
   onEndUpdateBatch: function (aDataSource) {
     for (var i = 0; i < this._observers.length; ++i) {
       this._observers[i].onEndUpdateBatch(aDataSource);
     }
   },
-  
+
   beginUpdateBatch: function (aDataSource) {
     for (var i = 0; i < this._observers.length; ++i) {
       this._observers[i].beginUpdateBatch(aDataSource);
     }
   },
-  
+
   endUpdateBatch: function (aDataSource) {
     for (var i = 0; i < this._observers.length; ++i) {
       this._observers[i].endUpdateBatch(aDataSource);
     }
   },
 
   flush: function () {
     var rds = this._inner.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
-    if (rds) 
+    if (rds)
       rds.Flush();
   },
-  
+
   destroy: function () {
     this._inner.RemoveObserver(this);
   }
 };
 
 /**
  * Handler Override class
  **/
@@ -420,39 +420,39 @@ function HandlerOverride(aURI, aDatasour
 }
 
 HandlerOverride.prototype = {
   // general information
   get mimeType()
   {
     return this.getLiteralForContentType(this.URI, "value");
   },
-  
+
   set mimeType(aMIMETypeString)
   {
     this.changeMIMEStuff(MIME_URI(aMIMETypeString), "value", aMIMETypeString.toLowerCase());
     return aMIMETypeString;
   },
-  
+
   get description()
   {
     return this.getLiteralForContentType(this.URI, "description");
-  },  
-  
+  },
+
   set description(aDescriptionString)
   {
     this.changeMIMEStuff(MIME_URI(this.mimeType), "description", aDescriptionString);
     return aDescriptionString;
   },
-  
+
   get isEditable()
   {
     return this.getLiteralForContentType(this.URI, "editable");
   },
-  
+
   set isEditable(aIsEditableString)
   {
     this.changeMIMEStuff(MIME_URI(this.mimeType), "editable", aIsEditableString);
     return aIsEditableString;
   },
 
   get extensions()
   {
@@ -469,41 +469,41 @@ HandlerOverride.prototype = {
             extString += " ";
           }
           extString += currentExtension.Value.toLowerCase();
         }
       }
     }
     return extString;
   },
-  
+
   addExtension: function (aExtensionString)
   {
     this.assertMIMEStuff(MIME_URI(this.mimeType), "fileExtensions", aExtensionString.toLowerCase());
   },
-  
+
   removeExtension: function (aExtensionString)
   {
     this.unassertMIMEStuff(MIME_URI(this.mimeType), "fileExtensions", aExtensionString.toLowerCase());
   },
 
   clearExtensions: function ()
   {
     var extArray = this.extensions.split(" ");
     for (i = extArray.length - 1; i >= 0; --i) {
       this.removeExtension(extArray[i]);
     }
   },
-  
+
   // content handling
   get saveToDisk()
   {
     return this.getHandlerInfoForType(this.URI, "saveToDisk");
   },
-  
+
   set saveToDisk(aSavedToDisk)
   {
     this.changeMIMEStuff(HANDLER_URI(this.mimeType), "saveToDisk", aSavedToDisk);
     this.setHandlerProcedure("handleInternal", "false");
     this.setHandlerProcedure("useSystemDefault", "false");
     return aSavedToDisk;
  },
 
@@ -514,22 +514,22 @@ HandlerOverride.prototype = {
 
   set useSystemDefault(aUseSystemDefault)
   {
     this.changeMIMEStuff(HANDLER_URI(this.mimeType), "useSystemDefault", aUseSystemDefault);
     this.setHandlerProcedure("handleInternal", "false");
     this.setHandlerProcedure("saveToDisk", "false");
     return aUseSystemDefault;
   },
-  
+
   get handleInternal()
   {
     return this.getHandlerInfoForType(this.URI, "handleInternal");
   },
-  
+
   set handleInternal(aHandledInternally)
   {
     this.changeMIMEStuff(HANDLER_URI(this.mimeType), "handleInternal", aHandledInternally);
     this.setHandlerProcedure("saveToDisk", "false");
     this.setHandlerProcedure("useSystemDefault", "false");
     return aHandledInternally;
   },
 
@@ -540,51 +540,51 @@ HandlerOverride.prototype = {
     var oppositeValue = aValue == "false" ? "true" : "false";
     var trueLiteral = gRDF.GetLiteral(oppositeValue);
     var hasCounterpart = this._DS.HasAssertion(handlerSource, handlerProperty, trueLiteral, true);
     if (hasCounterpart) {
       var falseLiteral = gRDF.GetLiteral(aValue);
       this._DS.Change(handlerSource, handlerProperty, trueLiteral, falseLiteral);
     }
   },
-  
+
   get alwaysAsk()
   {
     return this.getHandlerInfoForType(this.URI, "alwaysAsk");
   },
-  
+
   set alwaysAsk(aAlwaysAsk)
   {
     this.changeMIMEStuff(HANDLER_URI(this.mimeType), "alwaysAsk", aAlwaysAsk);
     return aAlwaysAsk;
   },
-  
+
   // helper application
   get appDisplayName()
   {
     return getHelperAppInfoForType(this.URI, "prettyName");
   },
-  
+
   set appDisplayName(aDisplayName)
   {
     if (aDisplayName)
       this.changeMIMEStuff(APP_URI(this.mimeType), "prettyName", aDisplayName);
     else {
       var currentValue = this.getLiteralForContentType(APP_URI(this.mimeType), "prettyName");
       this.unassertMIMEStuff(APP_URI(this.mimeType), "prettyName", currentValue);
     }
 
     return aDisplayName;
   },
-  
+
   get appPath()
   {
     return this.getHelperAppInfoForType(this.URI, "path");
   },
-  
+
   set appPath(aAppPath)
   {
     if (aAppPath)
       this.changeMIMEStuff(APP_URI(this.mimeType), "path", aAppPath);
     else {
       var currentValue = this.getLiteralForContentType(APP_URI(this.mimeType), "path");
       this.unassertMIMEStuff(APP_URI(this.mimeType), "path", currentValue);
     }
@@ -609,20 +609,20 @@ HandlerOverride.prototype = {
     var helperAppProperty = gRDF.GetUnicodeResource(NC_URI("externalApplication"));
     var helperAppResource = gRDF.GetUnicodeResource(APP_URI(this.mimeType));
     this._DS.Assert(handlerResource, helperAppProperty, helperAppResource, true);
     // add the mime type to the MIME types seq
     var container = this.ensureAndGetTypeList("mimetype");
     var element = gRDF.GetUnicodeResource(MIME_URI(this.mimeType));
     if (container.IndexOf(element) == -1)
       container.AppendElement(element);
-  }, 
-  
+  },
+
   // Implementation helper methods
-  
+
   getLiteralForContentType: function (aURI, aProperty)
   {
     var contentTypeResource = gRDF.GetUnicodeResource(aURI);
     var propertyResource = gRDF.GetUnicodeResource(NC_URI(aProperty));
     return this.getLiteral(contentTypeResource, propertyResource);
   },
 
   getLiteral: function (aSource, aProperty)
@@ -671,35 +671,35 @@ HandlerOverride.prototype = {
     var mimeSource = gRDF.GetUnicodeResource(aMIMEString);
     var valueProperty = gRDF.GetUnicodeResource(NC_URI(aPropertyString));
     var mimeLiteral = gRDF.GetLiteral(aValueString);
     var currentValue = this._DS.GetTarget(mimeSource, valueProperty, true);
     if (currentValue) {
       this._DS.Change(mimeSource, valueProperty, currentValue, mimeLiteral);
     } else {
       this._DS.Assert(mimeSource, valueProperty, mimeLiteral, true);
-    } 
+    }
   },
 
   unassertMIMEStuff: function(aMIMEString, aPropertyString, aValueString)
   {
     var mimeSource = gRDF.GetUnicodeResource(aMIMEString);
     var valueProperty = gRDF.GetUnicodeResource(NC_URI(aPropertyString));
     var mimeLiteral = gRDF.GetLiteral(aValueString);
     this._DS.Unassert(mimeSource, valueProperty, mimeLiteral, true);
   },
 
   /**
    * Get the list of types for the given class, creating the list if it doesn't
    * already exist. The class can be either CLASS_MIMEINFO or CLASS_PROTOCOLINFO
    * (i.e. the result of a call to _getClass).
-   * 
+   *
    * |urn:<class>s|
    * |urn:<class>s:root|
-   * 
+   *
    * @param aClass {string} the class for which to retrieve a list of types
    *
    * @returns {nsIRDFContainer} the list of types
    */
   ensureAndGetTypeList: function (aClass) {
     var source = gRDF.GetResource("urn:" + aClass + "s");
     var property =
       gRDF.GetResource(aClass == CLASS_MIMEINFO ? NC_MIME_TYPES
--- a/toolkit/mozapps/downloads/tests/chrome/utils.js
+++ b/toolkit/mozapps/downloads/tests/chrome/utils.js
@@ -69,17 +69,17 @@ function addDownload(aName) {
                            nsIWBP.PERSIST_FLAGS_BYPASS_CACHE |
                            nsIWBP.PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION;
     let dirSvc = Cc["@mozilla.org/file/directory_service;1"].
                  getService(Ci.nsIProperties);
     let dmFile = dirSvc.get("TmpD", Ci.nsIFile);
     dmFile.append(aName || ("dm-test-file-" + randomString()));
     if (dmFile.exists())
       throw "Download file already exists";
-  
+
     let dl = dm.addDownload(Ci.nsIDownloadManager.DOWNLOAD_TYPE_DOWNLOAD,
                             createURI("http://example.com/httpd.js"),
                             createURI(dmFile), null, null,
                             Math.round(Date.now() * 1000), null, persist, false);
 
     let privacyContext = window.QueryInterface(Ci.nsIInterfaceRequestor)
                                .getInterface(Ci.nsIWebNavigation)
                                .QueryInterface(Ci.nsILoadContext);
--- a/toolkit/mozapps/extensions/ChromeManifestParser.jsm
+++ b/toolkit/mozapps/extensions/ChromeManifestParser.jsm
@@ -75,65 +75,65 @@ this.ChromeManifestParser = {
 
     let baseURI = NetUtil.newURI(".", null, aURI).spec;
 
     let data = [];
     let lines = contents.split("\n");
     lines.forEach(parseLine.bind(this));
     return data;
   },
-  
+
   _readFromJar: function(aURI) {
     let data = "";
     let entries = [];
     let readers = [];
-    
+
     try {
-      // Deconstrict URI, which can be nested jar: URIs. 
+      // Deconstrict URI, which can be nested jar: URIs.
       let uri = aURI.clone();
       while (uri instanceof Ci.nsIJARURI) {
         entries.push(uri.JAREntry);
         uri = uri.JARFile;
       }
 
       // Open the base jar.
       let reader = Cc["@mozilla.org/libjar/zip-reader;1"].
                    createInstance(Ci.nsIZipReader);
       reader.open(uri.QueryInterface(Ci.nsIFileURL).file);
       readers.push(reader);
-  
+
       // Open the nested jars.
       for (let i = entries.length - 1; i > 0; i--) {
         let innerReader = Cc["@mozilla.org/libjar/zip-reader;1"].
                           createInstance(Ci.nsIZipReader);
         innerReader.openInner(reader, entries[i]);
         readers.push(innerReader);
         reader = innerReader;
       }
-      
+
       // First entry is the actual file we want to read.
       let zis = reader.getInputStream(entries[0]);
       data = NetUtil.readInputStreamToString(zis, zis.available());
     }
     finally {
       // Close readers in reverse order.
       for (let i = readers.length - 1; i >= 0; i--) {
         readers[i].close();
         flushJarCache(readers[i].file);
       }
     }
-    
+
     return data;
   },
-  
+
   _readFromFile: function(aURI) {
     let file = aURI.QueryInterface(Ci.nsIFileURL).file;
     if (!file.exists() || !file.isFile())
       return "";
-    
+
     let data = "";
     let fis = Cc["@mozilla.org/network/file-input-stream;1"].
               createInstance(Ci.nsIFileInputStream);
     try {
       fis.init(file, -1, -1, false);
       data = NetUtil.readInputStreamToString(fis, fis.available());
     } finally {
       fis.close();
--- a/toolkit/mozapps/extensions/content/list.js
+++ b/toolkit/mozapps/extensions/content/list.js
@@ -11,21 +11,21 @@ const kDialog = "dialog";
  * This dialog can be initialized from parameters supplied via window.arguments
  * or it can be used to display blocklist notification and blocklist blocked
  * installs via nsIDialogParamBlock as is done by nsIExtensionManager.
  *
  * When using this dialog with window.arguments it must be opened modally, the
  * caller can inspect the user action after the dialog closes by inspecting the
  * value of the |result| parameter on this object which is set to the dlgtype
  * of the button used to close the dialog.
- * 
+ *
  * window.arguments[0] is an array of strings to display in the tree. If the
  * array is empty the tree will not be displayed.
  * window.arguments[1] a JS Object with the following properties:
- * 
+ *
  * title:    A title string, to be displayed in the title bar of the dialog.
  * message1: A message string, displayed above the addon list
  * message2: A message string, displayed below the addon list
  * message3: A bolded message string, displayed below the addon list
  * moreInfoURL: An url for displaying more information
  * iconClass  : Can be one of the following values (default is alert-icon)
  *              alert-icon, error-icon, or question-icon
  *
@@ -34,17 +34,17 @@ const kDialog = "dialog";
  *
  * buttons: {
  *  accept: { label: "A Label for the Accept button",
  *            focused: true },
  *  cancel: { label: "A Label for the Cancel button" },
  *  ...
  * },
  *
- * result:  The dlgtype of button that was used to dismiss the dialog. 
+ * result:  The dlgtype of button that was used to dismiss the dialog.
  */
 
 "use strict";
 
 var gButtons = { };
 
 function init() {
   var de = document.documentElement;
@@ -108,17 +108,17 @@ function init() {
   var messages = ["message1", "message2", "message3"];
   for (let messageEntry of messages) {
     if (messageEntry in params) {
       var message = document.getElementById(messageEntry);
       message.hidden = false;
       message.appendChild(document.createTextNode(params[messageEntry]));
     }
   }
-  
+
   document.getElementById("infoIcon").className =
     params["iconClass"] ? "spaced " + params["iconClass"] : "spaced alert-icon";
 
   if ("moreInfoURL" in params && params["moreInfoURL"]) {
     message = document.getElementById("moreInfo");
     message.value = extensionsBundle.getString("moreInfoText");
     message.setAttribute("href", params["moreInfoURL"]);
     document.getElementById("moreInfoBox").hidden = false;
--- a/toolkit/mozapps/extensions/content/selectAddons.xml
+++ b/toolkit/mozapps/extensions/content/selectAddons.xml
@@ -169,17 +169,17 @@
           this.setAttribute("action", "");
         ]]></body>
       </method>
 
       <method name="updateAction">
         <body><![CDATA[
           this.setActionMessage();
           let installingUpdate = this._install &&
-                                 (AddonManager.shouldAutoUpdate(this._addon) || 
+                                 (AddonManager.shouldAutoUpdate(this._addon) ||
                                   this._update.checked);
 
           if (this._keep.checked && (!this._addon.appDisabled || installingUpdate))
             this.setAttribute("active", "true");
           else
             this.removeAttribute("active");
 
           gSelect.updateButtons();
--- a/toolkit/mozapps/extensions/content/setting.xml
+++ b/toolkit/mozapps/extensions/content/setting.xml
@@ -23,17 +23,17 @@
   <binding id="setting-base">
     <implementation>
       <constructor><![CDATA[
         this.preferenceChanged();
 
         this.addEventListener("keypress", function(event) {
           event.stopPropagation();
         }, false);
-        
+
         if (this.usePref)
           Services.prefs.addObserver(this.pref, this._observer, true);
       ]]></constructor>
 
       <field name="_observer"><![CDATA[({
         _self: this,
 
         QueryInterface: function(aIID) {
--- a/toolkit/mozapps/extensions/content/xpinstallConfirm.js
+++ b/toolkit/mozapps/extensions/content/xpinstallConfirm.js
@@ -31,28 +31,28 @@ XPInstallConfirm.init = function()
 
   var _installCountdownLength = 5;
   try {
     var prefs = Components.classes["@mozilla.org/preferences-service;1"]
                           .getService(Components.interfaces.nsIPrefBranch);
     var delay_in_milliseconds = prefs.getIntPref("security.dialog_enable_delay");
     _installCountdownLength = Math.round(delay_in_milliseconds / 500);
   } catch (ex) { }
-  
+
   var itemList = document.getElementById("itemList");
 
   let installMap = new WeakMap();
   let installListener = {
     onDownloadCancelled: function(install) {
       itemList.removeChild(installMap.get(install));
       if (--numItemsToInstall == 0)
         window.close();
     }
   };
-  
+
   var numItemsToInstall = args.installs.length;
   for (let install of args.installs) {
     var installItem = document.createElement("installitem");
     itemList.appendChild(installItem);
 
     installItem.name = install.addon.name;
     installItem.url = install.sourceURI.spec;
     var icon = install.iconURL;
@@ -67,26 +67,26 @@ XPInstallConfirm.init = function()
     else {
       installItem.cert = bundle.getString("unverified");
     }
     installItem.signed = install.certName ? "true" : "false";
 
     installMap.set(install, installItem);
     install.addListener(installListener);
   }
-  
+
   var introString = bundle.getString("itemWarnIntroSingle");
   if (numItemsToInstall > 4)
     introString = bundle.getFormattedString("itemWarnIntroMultiple", [numItemsToInstall]);
   var textNode = document.createTextNode(introString);
   var introNode = document.getElementById("itemWarningIntro");
   while (introNode.hasChildNodes())
     introNode.removeChild(introNode.firstChild);
   introNode.appendChild(textNode);
-  
+
   var okButton = document.documentElement.getButton("accept");
   okButton.focus();
 
   function okButtonCountdown() {
     _installCountdown -= 1;
 
     if (_installCountdown < 1) {
       okButton.label = bundle.getString("installButtonLabel");
--- a/toolkit/mozapps/extensions/test/browser/browser_bug557956.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_bug557956.js
@@ -277,17 +277,17 @@ add_test(function basic_mismatch() {
               EventUtils.synthesizeMouse(button, 2, 2, { }, aWindow);
 
               wait_for_window_close(aWindow, function() {
                 AddonManager.getAddonsByIDs(["addon8@tests.mozilla.org",
                                              "addon9@tests.mozilla.org"],
                                              function([a8, a9]) {
                   is(a8.version, "2.0", "addon8 should have updated");
                   is(a9.version, "2.0", "addon9 should have updated");
-  
+
                   check_telemetry({disabled: 5, metaenabled: 1, metadisabled: 0,
                                    upgraded: 2, failed: 0, declined: 1});
 
                   uninstall_test_addons(run_next_test);
                 });
               });
             });
           });
--- a/toolkit/mozapps/extensions/test/browser/browser_bug562797.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_bug562797.js
@@ -913,17 +913,17 @@ add_test(function() {
 
     wait_for_view_load(aManager, function(aManager) {
       is_in_discovery(aManager, MAIN_URL, true, false);
 
       clickLink(aManager, "link-good", function() {
         is_in_discovery(aManager, SECOND_URL, true, false);
 
         EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-discover"), { }, aManager);
-        
+
         waitForLoad(aManager, function() {
           is_in_discovery(aManager, MAIN_URL, true, false);
 
           go_back(aManager);
 
           waitForLoad(aManager, function() {
             is_in_discovery(aManager, SECOND_URL, true, true);
 
--- a/toolkit/mozapps/extensions/test/browser/browser_bug562890.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_bug562890.js
@@ -20,17 +20,17 @@ function test() {
     description: "foo"
   },
   {
     id: "test2@tests.mozilla.org",
     name: "Test add-on 2",
     description: "bar",
     optionsURL: addonPrefsURI
   }]);
-  
+
   open_manager("addons://list/extension", function(aManager) {
     var addonList = aManager.document.getElementById("addon-list");
     for (var addonItem of addonList.childNodes) {
       if (addonItem.hasAttribute("name") &&
           addonItem.getAttribute("name") == "Test add-on 1")
         break;
     }
     var prefsBtn = aManager.document.getAnonymousElementByAttribute(addonItem,
--- a/toolkit/mozapps/extensions/test/browser/browser_bug567127.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_bug567127.js
@@ -104,17 +104,17 @@ function test_confirmation(aWindow, aExp
 add_task(function* test_install_from_file() {
   gManagerWindow = yield open_manager("addons://list/extension");
 
   var filePaths = [
                    get_addon_file_url("browser_bug567127_1.xpi"),
                    get_addon_file_url("browser_bug567127_2.xpi")
                   ];
   MockFilePicker.returnFiles = filePaths.map(aPath => aPath.file);
-  
+
   Services.obs.addObserver(gInstallNotificationObserver,
                            "addon-install-started", false);
 
   // Set handler that executes the core test after the window opens,
   // and resolves the promise when the window closes
   let pInstallURIClosed = new Promise((resolve, reject) => {
     new WindowOpenListener(INSTALL_URI, function(aWindow) {
       try {
--- a/toolkit/mozapps/extensions/test/browser/browser_bug570760.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_bug570760.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/
  */
 
 // As part of bug 1077403, the leaking uncaught rejection should be fixed.
 thisTestLeaksUncaughtRejectionsAndShouldBeFixed("");
 
-// Bug 570760 - Make ctrl-f and / focus the search box in the add-ons manager 
+// Bug 570760 - Make ctrl-f and / focus the search box in the add-ons manager
 
 var gManagerWindow;
 var focusCount = 0;
 
 function test() {
   waitForExplicitFinish();
 
   open_manager(null, function(aWindow) {
--- a/toolkit/mozapps/extensions/test/browser/browser_bug573062.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_bug573062.js
@@ -26,17 +26,17 @@ function test() {
   },
   {
     id: "no-restart-required@tests.mozilla.org",
     name: "no-restart-required",
     description: "bar",
     permissions: perms,
     operationsRequiringRestart: AddonManager.OP_NEEDS_RESTART_NONE
   }]);
-  
+
   open_manager("addons://list/extension", function(aWindow) {
     let addonList = aWindow.document.getElementById("addon-list");
     let ed_r_Item, un_r_Item, no_r_Item;
     for (let addonItem of addonList.childNodes) {
       let name = addonItem.getAttribute("name");
       switch (name) {
         case "restart-enable-disable":
           ed_r_Item = addonItem;
--- a/toolkit/mozapps/extensions/test/browser/browser_bug587970.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_bug587970.js
@@ -4,17 +4,17 @@
 
 // Bug 587970 - Provide ability "Update all now" within 'Available Updates' screen
 
 var gManagerWindow;
 var gProvider;
 
 function test() {
   waitForExplicitFinish();
-  
+
   gProvider = new MockProvider();
 
   gProvider.createAddons([{
     id: "addon1@tests.mozilla.org",
     name: "addon 1",
     version: "1.0",
     applyBackgroundUpdates: AddonManager.AUTOUPDATE_DISABLE
   }, {
@@ -23,17 +23,17 @@ function test() {
     version: "2.0",
     applyBackgroundUpdates: AddonManager.AUTOUPDATE_DISABLE
   }, {
     id: "addon3@tests.mozilla.org",
     name: "addon 3",
     version: "3.0",
     applyBackgroundUpdates: AddonManager.AUTOUPDATE_DISABLE
   }]);
-  
+
 
   open_manager("addons://updates/available", function(aWindow) {
     gManagerWindow = aWindow;
     run_next_test();
   });
 }
 
 
@@ -43,17 +43,17 @@ function end_test() {
 
 
 add_test(function() {
   var list = gManagerWindow.document.getElementById("updates-list");
   is(list.childNodes.length, 0, "Available updates list should be empty");
 
   var emptyNotice = gManagerWindow.document.getElementById("empty-availableUpdates-msg");
   is_element_visible(emptyNotice, "Empty notice should be visible");
-  
+
   var updateSelected = gManagerWindow.document.getElementById("update-selected-btn");
   is_element_hidden(updateSelected, "Update Selected button should be hidden");
 
   info("Adding updates");
   gProvider.createInstalls([{
     name: "addon 1",
     version: "1.1",
     existingAddon: gProvider.addons[0]
@@ -81,17 +81,17 @@ add_test(function() {
   info("Waiting for pane to refresh");
   setTimeout(wait_for_refresh, 10);
 });
 
 
 add_test(function() {
   var list = gManagerWindow.document.getElementById("updates-list");
   is(list.childNodes.length, 3, "Available updates list should have 2 items");
-  
+
   var item1 = get_addon_element(gManagerWindow, "addon1@tests.mozilla.org");
   isnot(item1, null, "Item for addon1@tests.mozilla.org should be in list");
   var item2 = get_addon_element(gManagerWindow, "addon2@tests.mozilla.org");
   isnot(item2, null, "Item for addon2@tests.mozilla.org should be in list");
   var item3 = get_addon_element(gManagerWindow, "addon3@tests.mozilla.org");
   isnot(item3, null, "Item for addon3@tests.mozilla.org should be in list");
 
   var emptyNotice = gManagerWindow.document.getElementById("empty-availableUpdates-msg");
@@ -99,17 +99,17 @@ add_test(function() {
 
   var updateSelected = gManagerWindow.document.getElementById("update-selected-btn");
   is_element_visible(updateSelected, "Update Selected button should be visible");
   is(updateSelected.disabled, false, "Update Selected button should be enabled by default");
 
   is(item1._includeUpdate.checked, true, "Include Update checkbox should be checked by default for addon1");
   is(item2._includeUpdate.checked, true, "Include Update checkbox should be checked by default for addon2");
   is(item3._includeUpdate.checked, true, "Include Update checkbox should be checked by default for addon3");
-  
+
   info("Unchecking Include Update checkbox for addon1");
   EventUtils.synthesizeMouse(item1._includeUpdate, 2, 2, { }, gManagerWindow);
   is(item1._includeUpdate.checked, false, "Include Update checkbox should now be be unchecked for addon1");
   is(updateSelected.disabled, false, "Update Selected button should still be enabled");
 
   info("Unchecking Include Update checkbox for addon2");
   EventUtils.synthesizeMouse(item2._includeUpdate, 2, 2, { }, gManagerWindow);
   is(item2._includeUpdate.checked, false, "Include Update checkbox should now be be unchecked for addon2");
--- a/toolkit/mozapps/extensions/test/browser/browser_bug593535.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_bug593535.js
@@ -8,17 +8,17 @@
 const PREF_GETADDONS_GETSEARCHRESULTS = "extensions.getAddons.search.url";
 const SEARCH_URL = TESTROOT + "browser_bug593535.xml";
 const QUERY = "NOTFOUND";
 
 var gProvider;
 
 function test() {
   waitForExplicitFinish();
-  
+
   // Turn on searching for this test
   Services.prefs.setIntPref(PREF_SEARCH_MAXRESULTS, 15);
 
   open_manager("addons://list/extension", function(aWindow) {
     gManagerWindow = aWindow;
     run_next_test();
   });
 }
@@ -80,39 +80,39 @@ function getAnonymousElementByAttribute(
                                                                 aValue);
 }
 
 
 
 // Tests that a failed install for a remote add-on will ask to retry the install
 add_test(function() {
   var remoteItem;
-  
+
   var listener = {
     onDownloadFailed: function(aInstall) {
       aInstall.removeListener(this);
       ok(true, "Install failed as expected");
-      
+
       executeSoon(function() {
         is(remoteItem.getAttribute("notification"), "warning", "Item should have notification attribute set to 'warning'");
         is_element_visible(remoteItem._warning, "Warning text should be visible");
         is(remoteItem._warning.textContent, "There was an error downloading NOTFOUND.", "Warning should show correct message");
         is_element_visible(remoteItem._warningLink, "Retry button should be visible");
         run_next_test();
       });
     },
-    
+
     onInstallEnded: function() {
       ok(false, "Install should have failed");
     }
   }
 
   search(QUERY, function() {
     var list = gManagerWindow.document.getElementById("search-list");
     remoteItem = get_addon_item("notfound1");
     list.ensureElementIsVisible(remoteItem);
 
     remoteItem.mAddon.install.addListener(listener);
-    
+
     var installBtn = get_install_button(remoteItem);
     EventUtils.synthesizeMouseAtCenter(installBtn, { }, gManagerWindow);
   });
 });
--- a/toolkit/mozapps/extensions/test/browser/browser_bug608316.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_bug608316.js
@@ -4,17 +4,17 @@
 
 // Bug 608316 - Test that cancelling an uninstall during the onUninstalling
 // event doesn't confuse the UI
 
 var gProvider;
 
 function test() {
   waitForExplicitFinish();
-  
+
   gProvider = new MockProvider();
 
   gProvider.createAddons([{
     id: "addon1@tests.mozilla.org",
     name: "addon 1",
     version: "1.0"
   }]);
 
--- a/toolkit/mozapps/extensions/test/browser/browser_bug618502.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_bug618502.js
@@ -4,17 +4,17 @@
 
 // Bug 608316 - Test that opening the manager to an add-on that doesn't exist
 // just loads the default view
 
 var gCategoryUtilities;
 
 function test() {
   waitForExplicitFinish();
-  
+
   run_next_test();
 }
 
 function end_test() {
   finish();
 }
 
 add_test(function() {
--- a/toolkit/mozapps/extensions/test/browser/browser_discovery.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_discovery.js
@@ -571,17 +571,17 @@ add_test(function() {
   open_manager("addons://discover/", function(aWindow) {
     gManagerWindow = aWindow;
     var browser = gManagerWindow.document.getElementById("discover-browser");
     is(getURL(browser), MAIN_URL + "?mode=ignore", "Should have loaded the right url");
     close_manager(gManagerWindow, run_next_test);
   });
 });
 
-// Test for Bug 601442 - extensions.getAddons.showPane need to be update 
+// Test for Bug 601442 - extensions.getAddons.showPane need to be update
 // for the new addon manager.
 function bug_601442_test_elements(visible) {
   open_manager("addons://list/extension", function(aWindow) {
     gManagerWindow = aWindow;
     gCategoryUtilities = new CategoryUtilities(gManagerWindow);
     if(visible)
       ok(gCategoryUtilities.isTypeVisible("discover"), "Discover category should be visible");
     else
--- a/toolkit/mozapps/extensions/test/browser/browser_list.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_list.js
@@ -779,17 +779,17 @@ add_task(function*() {
   }
   catch (e) { }
 });
 
 
 add_task(function*() {
   info("Enabling lightweight theme");
   LightweightThemeManager.currentTheme = gLWTheme;
-  
+
   gManagerWindow.loadView("addons://list/theme");
   yield new Promise(resolve => wait_for_view_load(gManagerWindow, resolve));
 
   var addon = get_addon_element(gManagerWindow, "4@personas.mozilla.org");
 
   is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
   is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
--- a/toolkit/mozapps/extensions/test/browser/browser_manualupdates.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_manualupdates.js
@@ -33,26 +33,26 @@ function end_test() {
     finish();
   });
 }
 
 
 add_test(function() {
   gAvailableCategory = gManagerWindow.gCategories.get("addons://updates/available");
   is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should initially be hidden");
-  
+
   gProvider.createAddons([{
     id: "addon2@tests.mozilla.org",
     name: "manually updating addon",
     version: "1.0",
     isCompatible: false,
     blocklistState: Ci.nsIBlocklistService.STATE_BLOCKED,
     applyBackgroundUpdates: AddonManager.AUTOUPDATE_DISABLE
   }]);
-  
+
   is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should still be hidden");
 
   run_next_test();
 });
 
 
 add_test(function() {
   let finished = 0;
@@ -95,17 +95,17 @@ add_test(function() {
 });
 
 
 add_test(function() {
   var list = gManagerWindow.document.getElementById("updates-list");
   is(list.itemCount, 1, "Should be 1 available update listed");
   var item = list.firstChild;
   is(item.mAddon.id, "addon2@tests.mozilla.org", "Update item should be for the manually updating addon");
-  
+
   // The item in the list will be checking for update information asynchronously
   // so we have to wait for it to complete. Doing the same async request should
   // make our callback be called later.
   AddonManager.getAllInstalls(run_next_test);
 });
 
 add_test(function() {
   var list = gManagerWindow.document.getElementById("updates-list");
--- a/toolkit/mozapps/extensions/test/browser/browser_recentupdates.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_recentupdates.js
@@ -25,17 +25,17 @@ function test() {
     version: "1.0",
     updateDate: new Date(Date.now() - (1000 * 5))
   }, {
     id: "addon3@tests.mozilla.org",
     name: "updated 1 month ago",
     version: "1.0",
     updateDate: new Date(Date.now() - (1000 * 60 * 60 * 25 * 30))
   }]);
-  
+
   open_manager("addons://list/extension", function(aWindow) {
     gManagerWindow = aWindow;
     gCategoryUtilities = new CategoryUtilities(gManagerWindow);
     run_next_test();
   });
 }
 
 function end_test() {
--- a/toolkit/mozapps/extensions/test/browser/browser_searching.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_searching.js
@@ -266,17 +266,17 @@ function get_expected_results(aSortBy, a
 function check_results(aQuery, aSortBy, aReverseOrder, aShowLocal) {
 
   var xpinstall_enabled = true;
   try {
     xpinstall_enabled = Services.prefs.getBoolPref(PREF_XPI_ENABLED);
   }
   catch (e) {};
 
-  // When XPI Instalation is disabled, those buttons are hidden and unused  
+  // When XPI Instalation is disabled, those buttons are hidden and unused
   if (xpinstall_enabled) {
     var localFilterSelected = gManagerWindow.document.getElementById("search-filter-local").selected;
     var remoteFilterSelected = gManagerWindow.document.getElementById("search-filter-remote").selected;
     is(localFilterSelected, aShowLocal, "Local filter should be selected if showing local items");
     is(remoteFilterSelected, !aShowLocal, "Remote filter should be selected if showing remote items");
   }
 
   // Get expected order assuming default order
@@ -621,20 +621,20 @@ add_test(function() {
     gManagerWindow = aWindow;
     gCategoryUtilities = new CategoryUtilities(gManagerWindow);
 
     Services.prefs.setBoolPref(PREF_STRICT_COMPAT, false);
     search("incompatible", false, function() {
       var item = get_addon_item("remote5");
       is_element_visible(item, "Incompatible addon should be visible");
       isnot(item.getAttribute("notification"), "warning", "Compatibility warning should not be shown");
-  
+
       item = get_addon_item("remote6");
       is(item, null, "Addon incompatible with the product should not be visible");
-  
+
       Services.prefs.setBoolPref(PREF_STRICT_COMPAT, true);
       run_next_test();
     });
   });
 });
 
 
 // Tests that restarting the manager doesn't change search results
--- a/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository.js
@@ -203,17 +203,17 @@ var SEARCH_RESULTS = [{
   reviewURL:              BASE_URL + "/review3.html",
   totalDownloads:         2222,
   weeklyDownloads:        3333,
   dailyUsers:             4444,
   sourceURI:              BASE_URL + "/test3.xpi",
   repositoryStatus:       8,
   size:                   5555,
   updateDate:             new Date(1265033045000),
-  
+
 }, {
   id:                     "purchase1@tests.mozilla.org",
   type:                   "extension",
   version:                "2.0",
   creator:                {
                             name: "Test Creator - Last Passing",
                             url:  BASE_URL + "/creatorLastPassing.html"
                           },
--- a/toolkit/mozapps/extensions/test/xpcshell/test_ChromeManifestParser.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_ChromeManifestParser.js
@@ -7,17 +7,17 @@
 Components.utils.import("resource://gre/modules/ChromeManifestParser.jsm");
 
 
 function run_test() {
   do_test_pending();
   createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "2", "2");
 
   startupManager();
-  
+
   installAllFiles([do_get_addon("test_chromemanifest_1"),
                    do_get_addon("test_chromemanifest_2"),
                    do_get_addon("test_chromemanifest_3"),
                    do_get_addon("test_chromemanifest_4")],
                   function() {
 
     restartManager();
     run_test_1();
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bug455906.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_bug455906.js
@@ -123,17 +123,17 @@ var PluginHost = {
     countRef.value = PLUGINS.length;
     return PLUGINS;
   },
 
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsIPluginHost)
      || iid.equals(Ci.nsISupports))
       return this;
-  
+
     throw Components.results.NS_ERROR_NO_INTERFACE;
   }
 }
 
 // Don't need the full interface, attempts to call other methods will just
 // throw which is just fine
 var WindowWatcher = {
   openWindow: function(parent, url, name, features, windowArguments) {
@@ -242,17 +242,17 @@ function check_initial_state(callback) {
   AddonManager.getAddonsByIDs(ADDONS.map(a => a.id), function(addons) {
     do_check_eq(check_addon_state(addons[0]), "true,false,false");
     do_check_eq(check_addon_state(addons[1]), "false,false,false");
     do_check_eq(check_addon_state(addons[2]), "false,false,false");
     do_check_eq(check_addon_state(addons[3]), "true,true,false");
     do_check_eq(check_addon_state(addons[4]), "false,false,false");
     do_check_eq(check_addon_state(addons[5]), "false,false,true");
     do_check_eq(check_addon_state(addons[6]), "false,false,true");
-  
+
     do_check_eq(check_plugin_state(PLUGINS[0]), "true,false");
     do_check_eq(check_plugin_state(PLUGINS[1]), "false,false");
     do_check_eq(check_plugin_state(PLUGINS[2]), "false,false");
     do_check_eq(check_plugin_state(PLUGINS[3]), "true,false");
     do_check_eq(check_plugin_state(PLUGINS[4]), "false,false");
     do_check_eq(check_plugin_state(PLUGINS[5]), "false,true");
 
     callback();
@@ -263,32 +263,32 @@ function check_initial_state(callback) {
 function check_test_pt1() {
   dump("Checking pt 1\n");
 
   AddonManager.getAddonsByIDs(ADDONS.map(a => a.id), callback_soon(function(addons) {
     for (var i = 0; i < ADDONS.length; i++) {
       if (!addons[i])
         do_throw("Addon " + (i + 1) + " did not get installed correctly");
     }
-  
+
     do_check_eq(check_addon_state(addons[0]), "false,false,false");
     do_check_eq(check_addon_state(addons[1]), "false,false,false");
     do_check_eq(check_addon_state(addons[2]), "false,false,false");
-  
+
     // Warn add-ons should be soft disabled automatically
     do_check_eq(check_addon_state(addons[3]), "true,true,false");
     do_check_eq(check_addon_state(addons[4]), "true,true,false");
-  
+
     // Blocked and incompatible should be app disabled only
     do_check_eq(check_addon_state(addons[5]), "false,false,true");
     do_check_eq(check_addon_state(addons[6]), "false,false,true");
-  
+
     // We've overridden the plugin host so we cannot tell what that would have
     // initialised the plugins as
-  
+
     // Put the add-ons into the base state
     addons[0].userDisabled = true;
     addons[4].userDisabled = false;
 
     restartManager();
     check_initial_state(function() {
       gNotificationCheck = check_notification_pt2;
       gTestCheck = check_test_pt2;
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bug468528.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_bug468528.js
@@ -43,16 +43,16 @@ function run_test() {
   var blocklist = Components.classes["@mozilla.org/extensions/blocklist;1"]
                             .getService(nsIBLS);
 
   // blocked (sanity check)
   do_check_true(blocklist.getPluginBlocklistState(PLUGINS[0], "1", "1.9") == nsIBLS.STATE_BLOCKED);
 
   // not blocked - won't match due to invalid regexp
   do_check_true(blocklist.getPluginBlocklistState(PLUGINS[1], "1", "1.9") == nsIBLS.STATE_NOT_BLOCKED);
-  
+
   // blocked - the invalid regexp for the previous item shouldn't affect this one
   do_check_true(blocklist.getPluginBlocklistState(PLUGINS[2], "1", "1.9") == nsIBLS.STATE_BLOCKED);
 
   // not blocked - the previous invalid regexp shouldn't act as a wildcard
   do_check_true(blocklist.getPluginBlocklistState(PLUGINS[3], "1", "1.9") == nsIBLS.STATE_NOT_BLOCKED);
 
 }
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bug514327_3.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_bug514327_3.js
@@ -47,17 +47,17 @@ var PluginHost = {
     countRef.value = PLUGINS.length;
     return PLUGINS;
   },
 
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsIPluginHost)
      || iid.equals(Ci.nsISupports))
       return this;
-  
+
     throw Components.results.NS_ERROR_NO_INTERFACE;
   }
 }
 
 // Don't need the full interface, attempts to call other methods will just
 // throw which is just fine
 var WindowWatcher = {
   openWindow: function(parent, url, name, features, args) {
@@ -101,38 +101,38 @@ function run_test() {
   gTestserver.registerDirectory("/data/", do_get_file("data"));
   gTestserver.start(-1);
   gPort = gTestserver.identity.primaryPort;
 
   startupManager();
 
   // initialize the blocklist with no entries
   copyBlocklistToProfile(do_get_file("data/test_bug514327_3_empty.xml"));
-  
+
   gPrefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
   gBlocklist = Cc["@mozilla.org/extensions/blocklist;1"].getService(nsIBLS);
-  
+
   // should NOT be marked as outdated by the blocklist
   do_check_true(gBlocklist.getPluginBlocklistState(PLUGINS[0], "1", "1.9") == nsIBLS.STATE_NOT_BLOCKED);
-  
+
   do_test_pending();
 
   // update blocklist with data that marks the plugin as outdated
   do_update_blocklist("test_bug514327_3_outdated_1.xml", test_part_1);
 }
 
 function test_part_1() {
   // plugin should now be marked as outdated
   do_check_true(gBlocklist.getPluginBlocklistState(PLUGINS[0], "1", "1.9") == nsIBLS.STATE_OUTDATED);
   // and the notifyUser pref should be set to true
   do_check_true(gPrefs.getBoolPref("plugins.update.notifyUser"));
-  
+
   // preternd the user has been notified, reset the pref
   gPrefs.setBoolPref("plugins.update.notifyUser", false);
-  
+
   // update blocklist with data that marks the plugin as outdated
   do_update_blocklist("test_bug514327_3_outdated_2.xml", test_part_2);
 }
 
 function test_part_2() {
   // plugin should still be marked as outdated
   do_check_true(gBlocklist.getPluginBlocklistState(PLUGINS[0], "1", "1.9") == nsIBLS.STATE_OUTDATED);
   // and the notifyUser pref should NOT be set to true, as the plugin was already outdated
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bug563256.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_bug563256.js
@@ -34,17 +34,17 @@ function run_test() {
     targetApplications: [{
       id: "xpcshell@tests.mozilla.org",
       minVersion: "1",
       maxVersion: "2"
     }]
   }, profileDir);
 
   startupManager();
-                                     
+
   do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0");
 
   AddonManager.getAddonsByIDs(["default@tests.mozilla.org",
                                "alternate@tests.mozilla.org"], function([d, a]) {
     do_check_neq(d, null);
     do_check_false(d.userDisabled);
     do_check_false(d.appDisabled);
     do_check_true(d.isActive);
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bug594058.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_bug594058.js
@@ -79,10 +79,10 @@ function run_test() {
     restartManager();
     do_check_true(gCachePurged);
     gCachePurged = false;
 
     restartManager();
     do_check_false(gCachePurged);
 
     do_test_finished();
-  });  
+  });
 }
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bug619730.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_bug619730.js
@@ -15,17 +15,17 @@ gPort = gTestserver.identity.primaryPort
 mapFile("/data/test_bug619730.xml", gTestserver);
 
 function load_blocklist(file, aCallback) {
   Services.obs.addObserver(function() {
     Services.obs.removeObserver(arguments.callee, "blocklist-updated");
 
     do_execute_soon(aCallback);
   }, "blocklist-updated", false);
-  
+
   Services.prefs.setCharPref("extensions.blocklist.url", "http://localhost:" +
                              gPort + "/data/" + file);
   var blocklist = Cc["@mozilla.org/extensions/blocklist;1"].
                   getService(Ci.nsITimerCallback);
   blocklist.notify(null);
 }
 
 var gSawGFX = false;
--- a/toolkit/mozapps/extensions/test/xpcshell/test_compatoverrides.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_compatoverrides.js
@@ -250,10 +250,10 @@ function check_compat_status(aCallback) 
 function run_test_1() {
   do_print("Run test 1");
   check_compat_status(run_test_2);
 }
 
 function run_test_2() {
   do_print("Run test 2");
   restartManager();
-  check_compat_status(end_test);  
+  check_compat_status(end_test);
 }
--- a/toolkit/mozapps/extensions/test/xpcshell/test_dictionary.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_dictionary.js
@@ -34,17 +34,17 @@ mapFile("/data/test_dictionary.rdf", tes
 /**
  * This object is both a factory and an mozISpellCheckingEngine implementation (so, it
  * is de-facto a service). It's also an interface requestor that gives out
  * itself when asked for mozISpellCheckingEngine.
  */
 var HunspellEngine = {
   dictionaryDirs: [],
   listener: null,
-  
+
   QueryInterface: function hunspell_qi(iid) {
     if (iid.equals(Components.interfaces.nsISupports) ||
         iid.equals(Components.interfaces.nsIFactory) ||
         iid.equals(Components.interfaces.mozISpellCheckingEngine))
       return this;
     throw Components.results.NS_ERROR_NO_INTERFACE;
   },
   createInstance: function hunspell_ci(outer, iid) {
@@ -84,17 +84,17 @@ var HunspellEngine = {
       .getClassObject(Components.classes[this.contractID],
                       Components.interfaces.nsIFactory);
 
     Components.manager.nsIComponentRegistrar
       .unregisterFactory(this.origClassID, this.origFactory);
     Components.manager.nsIComponentRegistrar.registerFactory(this.classID,
       "Test hunspell", this.contractID, this);
   },
-  
+
   deactivate: function hunspell_deactivate() {
     Components.manager.nsIComponentRegistrar.unregisterFactory(this.classID, this);
     Components.manager.nsIComponentRegistrar.registerFactory(this.origClassID,
       "Hunspell", this.contractID, this.origFactory);
   },
 
   isDictionaryEnabled: function hunspell_isDictionaryEnabled(name) {
     return this.dictionaryDirs.some(function(dir) {
--- a/toolkit/mozapps/extensions/test/xpcshell/test_duplicateplugins.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_duplicateplugins.js
@@ -87,17 +87,17 @@ var PluginHost = {
     countRef.value = PLUGINS.length;
     return PLUGINS;
   },
 
   QueryInterface: function(iid) {
     if (iid.equals(Components.interfaces.nsIPluginHost)
      || iid.equals(Components.interfaces.nsISupports))
       return this;
-  
+
     throw Components.results.NS_ERROR_NO_INTERFACE;
   }
 }
 
 MockRegistrar.register("@mozilla.org/plugin/host;1", PluginHost);
 
 var gPluginIDs = [null, null, null, null, null];
 
--- a/toolkit/mozapps/extensions/test/xpcshell/test_filepointer.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_filepointer.js
@@ -118,17 +118,17 @@ function run_test_1() {
     let file = a1.getResourceURI().QueryInterface(AM_Ci.nsIFileURL).file;
     do_check_eq(file.parent.path, sourceDir.path);
 
     let rootUri = do_get_addon_root_uri(sourceDir, addon1.id);
     let uri = a1.getResourceURI("/");
     do_check_eq(uri.spec, rootUri);
     uri = a1.getResourceURI("install.rdf");
     do_check_eq(uri.spec, rootUri + "install.rdf");
-    
+
     // Check that upgrade is disabled for addons installed by file-pointers.
     do_check_eq(a1.permissions & AddonManager.PERM_CAN_UPGRADE, 0);
     run_test_2();
   });
 }
 
 // Tests that installing the addon from some other source doesn't clobber
 // the original sources
@@ -390,14 +390,14 @@ function run_test_10() {
     let file = a1.getResourceURI().QueryInterface(AM_Ci.nsIFileURL).file;
     do_check_eq(file.parent.path, sourceDir.path);
 
     let rootUri = do_get_addon_root_uri(sourceDir, addon1.id);
     let uri = a1.getResourceURI("/");
     do_check_eq(uri.spec, rootUri);
     uri = a1.getResourceURI("install.rdf");
     do_check_eq(uri.spec, rootUri + "install.rdf");
-    
+
     // Check that upgrade is disabled for addons installed by file-pointers.
     do_check_eq(a1.permissions & AddonManager.PERM_CAN_UPGRADE, 0);
     end_test();
   });
 }
--- a/toolkit/mozapps/extensions/test/xpcshell/test_hasbinarycomponents.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_hasbinarycomponents.js
@@ -7,17 +7,17 @@
 const profileDir = gProfD.clone();
 profileDir.append("extensions");
 
 function run_test() {
   do_test_pending();
   createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "2", "2");
 
   startupManager();
-  
+
   installAllFiles([do_get_addon("test_chromemanifest_1"),
                    do_get_addon("test_chromemanifest_2"),
                    do_get_addon("test_chromemanifest_3"),
                    do_get_addon("test_chromemanifest_4"),
                    do_get_addon("test_chromemanifest_5")],
                   function() {
 
     restartManager();
--- a/toolkit/mozapps/extensions/test/xpcshell/test_isDebuggable.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_isDebuggable.js
@@ -12,17 +12,17 @@ var ADDONS = [
 var IDS = [
   "bootstrap1@tests.mozilla.org",
   "bootstrap2@tests.mozilla.org",
   "jetpack@tests.mozilla.org"
 ];
 
 function run_test() {
   do_test_pending();
-  
+
   createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "2", "2");
 
   startupManager();
   AddonManager.checkCompatibility = false;
 
   installAllFiles(ADDONS.map(do_get_addon), function () {
     restartManager();
 
--- a/toolkit/mozapps/extensions/test/xpcshell/test_migrate4.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_migrate4.js
@@ -136,44 +136,44 @@ function prepare_profile() {
         oldSyncGUIDs[addon.id] = addon.syncGUID;
       }
 
       a6.findUpdates({
         onUpdateAvailable: function(aAddon, aInstall6) {
           AddonManager.getInstallForURL("http://localhost:" + gPort + "/addons/test_migrate4_7.xpi", function(aInstall7) {
             completeAllInstalls([aInstall6, aInstall7], function() {
               restartManager();
-  
+
               AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
                                            "addon2@tests.mozilla.org",
                                            "addon3@tests.mozilla.org",
                                            "addon4@tests.mozilla.org",
                                            "addon5@tests.mozilla.org",
                                            "addon6@tests.mozilla.org"],
                                            function([a1, a2, a3, a4, a5, a6]) {
                 a3.userDisabled = true;
                 a4.userDisabled = false;
-  
+
                 a5.findUpdates({
                   onUpdateFinished: function() {
                     do_execute_soon(perform_migration);
                   }
                 }, AddonManager.UPDATE_WHEN_USER_REQUESTED);
               });
             });
           }, "application/x-xpinstall");
         }
       }, AddonManager.UPDATE_WHEN_USER_REQUESTED);
     });
   });
 }
 
 function perform_migration() {
   shutdownManager();
-  
+
   // Turn on disabling for all scopes
   Services.prefs.setIntPref("extensions.autoDisableScopes", 15);
 
   changeXPIDBVersion(1, data => {
     // Delete the seen property from all add-ons to make sure it defaults to true
     for (let addon of data.addons) {
       delete addon.seen;
     }
--- a/toolkit/mozapps/extensions/test/xpcshell/test_migrate_max_version.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_migrate_max_version.js
@@ -75,17 +75,17 @@ add_test(function before_rebuild() {
     do_check_false(a1.isActive);
     do_check_false(a1.strictCompatibility);
     do_check_false(a1.foreignInstall);
 
     run_next_test();
   });
 });
 
-// now shut down, remove the JSON database, 
+// now shut down, remove the JSON database,
 // start up again, and make sure the data didn't migrate this time
 add_test(function rebuild_again() {
   shutdownManager();
   gExtensionsJSON.remove(true);
   startupManager();
 
   AddonManager.getAddonByID("addon1@tests.mozilla.org",
                             function check_after_rebuild(a1) {
--- a/toolkit/mozapps/extensions/test/xpcshell/test_plugins.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_plugins.js
@@ -104,17 +104,17 @@ function run_test_1() {
 
     do_check_neq(gID, null);
 
     AddonManager.getAddonByID(gID, function(p) {
       do_check_neq(p, null);
       do_check_eq(p.name, "Test Plug-in");
       do_check_eq(p.description,
                   "Plug-in for testing purposes.\u2122 " +
-                    "(\u0939\u093f\u0928\u094d\u0926\u0940 " + 
+                    "(\u0939\u093f\u0928\u094d\u0926\u0940 " +
                     "\u4e2d\u6587 " +
                     "\u0627\u0644\u0639\u0631\u0628\u064a\u0629)");
       do_check_eq(p.creator, null);
       do_check_eq(p.version, "1.0.0.0");
       do_check_eq(p.type, "plugin");
       do_check_eq(p.userDisabled, "askToActivate");
       do_check_false(p.appDisabled);
       do_check_true(p.isActive);
--- a/toolkit/mozapps/extensions/test/xpcshell/test_strictcompatibility.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_strictcompatibility.js
@@ -149,17 +149,17 @@ function do_check_compat_status(aStrict,
     do_execute_soon(aCallback);
   });
 }
 
 
 function run_test() {
   do_test_pending();
   createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
-  
+
   writeInstallRDFForExtension(addon1, profileDir);
   writeInstallRDFForExtension(addon2, profileDir);
   writeInstallRDFForExtension(addon3, profileDir);
   writeInstallRDFForExtension(addon4, profileDir);
   writeInstallRDFForExtension(addon5, profileDir);
   writeInstallRDFForExtension(addon6, profileDir);
   writeInstallRDFForExtension(addon7, profileDir);
 
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_localfile2.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_localfile2.js
@@ -1,25 +1,25 @@
 // ----------------------------------------------------------------------------
 // Test whether an install fails if the url is a local file when requested from
 // web content
 function test() {
   waitForExplicitFinish();
 
   var cr = Components.classes["@mozilla.org/chrome/chrome-registry;1"]
                      .getService(Components.interfaces.nsIChromeRegistry);
-  
-  var chromeroot = getChromeRoot(gTestPath);              
+
+  var chromeroot = getChromeRoot(gTestPath);
   var xpipath = chromeroot + "unsigned.xpi";
   try {
     xpipath = cr.convertChromeURL(makeURI(chromeroot + "unsigned.xpi")).spec;
   } catch (ex) {
     //scenario where we are running from a .jar and already extracted
   }
-  
+
   var triggers = encodeURIComponent(JSON.stringify({
     "Unsigned XPI": xpipath
   }));
   gBrowser.selectedTab = gBrowser.addTab();
 
   function loadListener() {
     gBrowser.selectedBrowser.removeEventListener("load", loadListener, true);
     gBrowser.contentWindow.addEventListener("InstallTriggered", page_loaded, false);
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_signed_multiple.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_signed_multiple.js
@@ -32,17 +32,17 @@ function get_item(items, url) {
 
 function confirm_install(window) {
 
   var sbs = Components.classes["@mozilla.org/intl/stringbundle;1"].
                        getService(Components.interfaces.nsIStringBundleService);
   var bundle = sbs.createBundle("chrome://mozapps/locale/xpinstall/xpinstallConfirm.properties");
 
   var expectedIntroString = bundle.formatStringFromName("itemWarnIntroMultiple", ["5"], 1);
-  
+
   var introStringNode = window.document.getElementById("itemWarningIntro");
   is(introStringNode.textContent, expectedIntroString, "Should have the correct intro string");
 
   var items = window.document.getElementById("itemList").childNodes;
   is(items.length, 5, "Should be 5 items listed in the confirmation dialog");
   let item = get_item(items, TESTROOT + "signed.xpi");
   if (item) {
     is(item.name, "Signed XPI Test", "Should have seen the name from the trigger list");
--- a/toolkit/mozapps/handling/content/dialog.js
+++ b/toolkit/mozapps/handling/content/dialog.js
@@ -41,17 +41,17 @@ var dialog = {
   //// Member Variables
 
   _handlerInfo: null,
   _URI: null,
   _itemChoose: null,
   _okButton: null,
   _windowCtxt: null,
   _buttonDisabled: true,
-  
+
   //////////////////////////////////////////////////////////////////////////////
   //// Methods
 
  /**
   * This function initializes the content of the dialog.
   */
   initialize: function initialize()
   {
@@ -133,40 +133,40 @@ var dialog = {
           // and users won't visit the handler's URL template, they'll only
           // visit URLs derived from that template (i.e. with %s in the template
           // replaced by the URL of the content being handled).
           elm.setAttribute("image", uri.prePath + "/favicon.ico");
         }
         elm.setAttribute("description", uri.prePath);
       }
       else if (app instanceof Ci.nsIDBusHandlerApp){
-	  elm.setAttribute("description", app.method);  
+	  elm.setAttribute("description", app.method);
       }
       else
         throw "unknown handler type";
 
       items.insertBefore(elm, this._itemChoose);
       if (preferredHandler && app == preferredHandler)
         this.selectedItem = elm;
     }
 
     if (this._handlerInfo.hasDefaultHandler) {
       let elm = document.createElement("richlistitem");
       elm.setAttribute("type", "handler");
       elm.id = "os-default-handler";
       elm.setAttribute("name", this._handlerInfo.defaultDescription);
-    
+
       items.insertBefore(elm, items.firstChild);
-      if (this._handlerInfo.preferredAction == 
-          Ci.nsIHandlerInfo.useSystemDefault) 
+      if (this._handlerInfo.preferredAction ==
+          Ci.nsIHandlerInfo.useSystemDefault)
           this.selectedItem = elm;
     }
     items.ensureSelectedElementIsVisible();
   },
-  
+
  /**
   * Brings up a filepicker and allows a user to choose an application.
   */
   chooseApplication: function chooseApplication()
   {
     var bundle = document.getElementById("base-strings");
     var title = bundle.getString("choose.application.title");
 
@@ -272,10 +272,10 @@ var dialog = {
   get selectedItem()
   {
     return document.getElementById("items").selectedItem;
   },
   set selectedItem(aItem)
   {
     return document.getElementById("items").selectedItem = aItem;
   }
-  
+
 };
--- a/toolkit/mozapps/handling/nsContentDispatchChooser.js
+++ b/toolkit/mozapps/handling/nsContentDispatchChooser.js
@@ -61,17 +61,17 @@ nsContentDispatchChooser.prototype =
     for (let text of arr) {
       let string = new SupportsString;
       string.data = text;
       params.appendElement(string, false);
     }
     params.appendElement(aHandler, false);
     params.appendElement(aURI, false);
     params.appendElement(aWindowContext, false);
-    
+
     var ww = Cc["@mozilla.org/embedcomp/window-watcher;1"].
              getService(Ci.nsIWindowWatcher);
     ww.openWindow(window,
                   CONTENT_HANDLING_URL,
                   null,
                   "chrome,dialog=yes,resizable,centerscreen",
                   params);
   },
--- a/toolkit/mozapps/preferences/changemp.js
+++ b/toolkit/mozapps/preferences/changemp.js
@@ -15,17 +15,17 @@ const nsIPK11Token = Components.interfac
 
 var params;
 var tokenName="";
 var pw1;
 
 function init()
 {
   pw1 = document.getElementById("pw1");
-	 	 
+
   process();
 }
 
 
 function process()
 {
    var secmoddb = Components.classes[nsPKCS11ModuleDB].getService(nsIPKCS11ModuleDB);
    var bundle = document.getElementById("bundlePreferences");
@@ -35,76 +35,76 @@ function process()
 
    var slot = secmoddb.findSlotByName(tokenName);
    if (slot) {
      var oldpwbox = document.getElementById("oldpw");
      var msgBox = document.getElementById("message");
      var status = slot.status;
      if (status == nsIPKCS11Slot.SLOT_UNINITIALIZED
          || status == nsIPKCS11Slot.SLOT_READY) {
-      
+
        oldpwbox.setAttribute("hidden", "true");
-       msgBox.setAttribute("value", bundle.getString("password_not_set")); 
+       msgBox.setAttribute("value", bundle.getString("password_not_set"));
        msgBox.setAttribute("hidden", "false");
 
        if (status == nsIPKCS11Slot.SLOT_READY) {
          oldpwbox.setAttribute("inited", "empty");
        } else {
          oldpwbox.setAttribute("inited", "true");
        }
-      
+
        // Select first password field
        document.getElementById('pw1').focus();
-    
+
      } else {
        // Select old password field
        oldpwbox.setAttribute("hidden", "false");
        msgBox.setAttribute("hidden", "true");
        oldpwbox.setAttribute("inited", "false");
        oldpwbox.focus();
      }
    }
 
   if (params) {
     // Return value 0 means "canceled"
     params.SetInt(1, 0);
   }
-  
+
   checkPasswords();
 }
 
 function setPassword()
 {
   var pk11db = Components.classes[nsPK11TokenDB].getService(nsIPK11TokenDB);
   var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
                                 .getService(Components.interfaces.nsIPromptService);
   var token = pk11db.findTokenByName(tokenName);
   dump("*** TOKEN!!!! (name = |" + token + "|\n");
 
   var oldpwbox = document.getElementById("oldpw");
   var initpw = oldpwbox.getAttribute("inited");
   var bundle = document.getElementById("bundlePreferences");
-  
+
   var success = false;
-  
+
   if (initpw == "false" || initpw == "empty") {
     try {
       var oldpw = "";
       var passok = 0;
-      
+
       if (initpw == "empty") {
         passok = 1;
       } else {
         oldpw = oldpwbox.value;
         passok = token.checkPassword(oldpw);
       }
-      
+
       if (passok) {
         if (initpw == "empty" && pw1.value == "") {
-          // This makes no sense that we arrive here, 
+          // This makes no sense that we arrive here,
           // we reached a case that should have been prevented by checkPasswords.
         } else {
           if (pw1.value == "") {
             var secmoddb = Components.classes[nsPKCS11ModuleDB].getService(nsIPKCS11ModuleDB);
             if (secmoddb.isFIPSEnabled) {
               // empty passwords are not allowed in FIPS mode
               promptService.alert(window,
                                   bundle.getString("pw_change_failed_title"),
@@ -112,17 +112,17 @@ function setPassword()
               passok = 0;
             }
           }
           if (passok) {
             token.changePassword(oldpw, pw1.value);
             if (pw1.value == "") {
               promptService.alert(window,
                                   bundle.getString("pw_change_success_title"),
-                                  bundle.getString("pw_erased_ok") 
+                                  bundle.getString("pw_erased_ok")
                                   + " " + bundle.getString("pw_empty_warning"));
             } else {
               promptService.alert(window,
                                   bundle.getString("pw_change_success_title"),
                                   bundle.getString("pw_change_ok"));
             }
             success = true;
           }
@@ -191,17 +191,17 @@ function setPasswordStrength()
 
 
   var pwstrength=((pwlength*10)-20) + (numeric*10) + (numsymbols*15) + (upper*10);
 
   // make sure we're give a value between 0 and 100
   if ( pwstrength < 0 ) {
     pwstrength = 0;
   }
-  
+
   if ( pwstrength > 100 ) {
     pwstrength = 100;
   }
 
   var mymeter=document.getElementById('pwmeter');
   mymeter.value = pwstrength;
 
   return;
--- a/toolkit/mozapps/preferences/fontbuilder.js
+++ b/toolkit/mozapps/preferences/fontbuilder.js
@@ -11,85 +11,85 @@ var FontBuilder = {
     if (!this._enumerator) {
       this._enumerator = Components.classes["@mozilla.org/gfx/fontenumerator;1"]
                                    .createInstance(Components.interfaces.nsIFontEnumerator);
     }
     return this._enumerator;
   },
 
   _allFonts: null,
-  buildFontList: function (aLanguage, aFontType, aMenuList) 
+  buildFontList: function (aLanguage, aFontType, aMenuList)
   {
     // Reset the list
     while (aMenuList.hasChildNodes())
       aMenuList.removeChild(aMenuList.firstChild);
-    
+
     var defaultFont = null;
     // Load Font Lists
     var fonts = this.enumerator.EnumerateFonts(aLanguage, aFontType, { } );
     if (fonts.length > 0)
       defaultFont = this.enumerator.getDefaultFont(aLanguage, aFontType);
     else {
       fonts = this.enumerator.EnumerateFonts(aLanguage, "", { });
       if (fonts.length > 0)
         defaultFont = this.enumerator.getDefaultFont(aLanguage, "");
     }
-    
+
     if (!this._allFonts)
       this._allFonts = this.enumerator.EnumerateAllFonts({});
-    
+
     // Build the UI for the Default Font and Fonts for this CSS type.
     var popup = document.createElement("menupopup");
     var separator;
     if (fonts.length > 0) {
       if (defaultFont) {
         var bundlePreferences = document.getElementById("bundlePreferences");
         var label = bundlePreferences.getFormattedString("labelDefaultFont", [defaultFont]);
         var menuitem = document.createElement("menuitem");
         menuitem.setAttribute("label", label);
         menuitem.setAttribute("value", ""); // Default Font has a blank value
         popup.appendChild(menuitem);
-        
+
         separator = document.createElement("menuseparator");
         popup.appendChild(separator);
       }
-      
+
       for (var i = 0; i < fonts.length; ++i) {
         menuitem = document.createElement("menuitem");
         menuitem.setAttribute("value", fonts[i]);
         menuitem.setAttribute("label", fonts[i]);
         popup.appendChild(menuitem);
       }
     }
-    
-    // Build the UI for the remaining fonts. 
+
+    // Build the UI for the remaining fonts.
     if (this._allFonts.length > fonts.length) {
       // Both lists are sorted, and the Fonts-By-Type list is a subset of the
       // All-Fonts list, so walk both lists side-by-side, skipping values we've
-      // already created menu items for. 
+      // already created menu items for.
       var builtItem = separator ? separator.nextSibling : popup.firstChild;
       var builtItemValue = builtItem ? builtItem.getAttribute("value") : null;
 
       separator = document.createElement("menuseparator");
       popup.appendChild(separator);
-      
+
       for (i = 0; i < this._allFonts.length; ++i) {
         if (this._allFonts[i] != builtItemValue) {
           menuitem = document.createElement("menuitem");
           menuitem.setAttribute("value", this._allFonts[i]);
           menuitem.setAttribute("label", this._allFonts[i]);
           popup.appendChild(menuitem);
         }
         else {
           builtItem = builtItem.nextSibling;
           builtItemValue = builtItem ? builtItem.getAttribute("value") : null;
         }
       }
     }
-    aMenuList.appendChild(popup);    
+    aMenuList.appendChild(popup);
   },
 
   readFontSelection(aElement)
   {
     // Determine the appropriate value to select, for the following cases:
     // - there is no setting
     // - the font selected by the user is no longer present (e.g. deleted from
     //   fonts folder)
--- a/toolkit/mozapps/preferences/removemp.js
+++ b/toolkit/mozapps/preferences/removemp.js
@@ -13,44 +13,44 @@ var gRemovePasswordDialog = {
   init: function ()
   {
     this._prompt = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
                              .getService(Components.interfaces.nsIPromptService);
     this._bundle = document.getElementById("bundlePreferences");
 
     this._okButton = document.documentElement.getButton("accept");
     this._okButton.label = this._bundle.getString("pw_remove_button");
-    
+
     this._password = document.getElementById("password");
 
     var pk11db = Components.classes["@mozilla.org/security/pk11tokendb;1"]
                            .getService(Components.interfaces.nsIPK11TokenDB);
     this._token = pk11db.getInternalKeyToken();
 
-    // Initialize the enabled state of the Remove button by checking the 
+    // Initialize the enabled state of the Remove button by checking the
     // initial value of the password ("" should be incorrect).
     this.validateInput();
   },
-  
+
   validateInput: function ()
   {
-    this._okButton.disabled = !this._token.checkPassword(this._password.value);    
+    this._okButton.disabled = !this._token.checkPassword(this._password.value);
   },
-  
+
   removePassword: function ()
   {
     if (this._token.checkPassword(this._password.value)) {
       this._token.changePassword(this._password.value, "");
       this._prompt.alert(window,
                          this._bundle.getString("pw_change_success_title"),
-                         this._bundle.getString("pw_erased_ok") 
+                         this._bundle.getString("pw_erased_ok")
                          + " " + this._bundle.getString("pw_empty_warning"));
     }
     else {
       this._password.value = "";
       this._password.focus();
-      this._prompt.alert(window, 
+      this._prompt.alert(window,
                          this._bundle.getString("pw_change_failed_title"),
                          this._bundle.getString("incorrect_pw"));
     }
   },
 };
 
--- a/toolkit/mozapps/update/content/history.js
+++ b/toolkit/mozapps/update/content/history.js
@@ -2,72 +2,72 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 const NS_XUL  = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
 
 var gUpdateHistory = {
   _view: null,
-  
+
   /**
    * Initialize the User Interface
    */
   onLoad: function() {
     this._view = document.getElementById("historyItems");
-    
-    var um = 
+
+    var um =
         Components.classes["@mozilla.org/updates/update-manager;1"].
         getService(Components.interfaces.nsIUpdateManager);
     var uc = um.updateCount;
     if (uc) {
       while (this._view.hasChildNodes())
         this._view.removeChild(this._view.firstChild);
-    
+
       var bundle = document.getElementById("updateBundle");
-      
+
       for (var i = 0; i < uc; ++i) {
         var update = um.getUpdateAt(i);
         if (!update || !update.name)
           continue;
 
         // Don't display updates that are downloading since they don't have
         // valid statusText for the UI (bug 485493).
         if (!update.statusText)
           continue;
 
         var element = document.createElementNS(NS_XUL, "update");
         this._view.appendChild(element);
-        element.name = bundle.getFormattedString("updateFullName", 
+        element.name = bundle.getFormattedString("updateFullName",
           [update.name, update.buildID]);
         element.type = bundle.getString("updateType_" + update.type);
         element.installDate = this._formatDate(update.installDate);
         if (update.detailsURL)
           element.detailsURL = update.detailsURL;
         else
           element.hideDetailsURL = true;
         element.status = update.statusText;
       }
     }
     var cancelbutton = document.documentElement.getButton("cancel");
     cancelbutton.focus();
   },
-  
+
   /**
    * Formats a date into human readable form
    * @param   seconds
    *          A date in seconds since 1970 epoch
    * @returns A human readable date string
    */
   _formatDate: function(seconds) {
-    var sdf = 
+    var sdf =
         Components.classes["@mozilla.org/intl/scriptabledateformat;1"].
         getService(Components.interfaces.nsIScriptableDateFormat);
     var date = new Date(seconds);
-    return sdf.FormatDateTime("", sdf.dateFormatLong, 
+    return sdf.FormatDateTime("", sdf.dateFormatLong,
                               sdf.timeFormatSeconds,
                               date.getFullYear(),
                               date.getMonth() + 1,
                               date.getDate(),
                               date.getHours(),
                               date.getMinutes(),
                               date.getSeconds());
   }
--- a/toolkit/mozapps/update/content/updates.xml
+++ b/toolkit/mozapps/update/content/updates.xml
@@ -5,32 +5,32 @@
 
 
 <!DOCTYPE bindings SYSTEM "chrome://mozapps/locale/update/updates.dtd">
 
 <bindings id="updatesBindings"
           xmlns="http://www.mozilla.org/xbl"
           xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
           xmlns:xbl="http://www.mozilla.org/xbl">
-  
+
   <binding id="remotecontent">
     <content>
       <xul:vbox flex="1" class="loadingBox">
         <xul:hbox align="start">
           <xul:image class="remoteLoadingThrobber" xbl:inherits="state"/>
           <xul:vbox flex="1">
             <xul:description flex="1" class="remoteLoadingMessage" crop="right"/>
           </xul:vbox>
         </xul:hbox>
       </xul:vbox>
       <xul:vbox flex="1">
         <xul:browser class="remoteContent" type="content" disablehistory="true"
                      flex="1"/>
       </xul:vbox>
-      <xul:stringbundle anonid="strings" 
+      <xul:stringbundle anonid="strings"
                         src="chrome://mozapps/locale/update/updates.properties"/>
     </content>
     <implementation>
       <constructor><![CDATA[
         // just to be safe, turn off js, auth, plugins, and subframes
         var docShell = this._content.docShell;
         docShell.allowJavascript = false;
         docShell.allowAuth = false;
@@ -40,17 +40,17 @@
         docShell.allowSubframes = false;
         //allow images
         //docShell.allowImages = false;
       ]]></constructor>
 
       <destructor><![CDATA[
         // clean up the listener but you may not have one if you never showed
         // the page with a <remotecontent> element
-        if (this._remoteProgressListener) 
+        if (this._remoteProgressListener)
           this._content.webProgress
               .removeProgressListener(this._remoteProgressListener);
       ]]></destructor>
 
       <field name="_message">
         document.getAnonymousElementByAttribute(this, "class", "remoteLoadingMessage");
       </field>
       <field name="_content">
@@ -73,17 +73,17 @@
         ]]></body>
       </method>
 
       <method name="onError">
         <body><![CDATA[
           this.setAttribute("selectedIndex", "0");
 
           var errorPropertyName = this.getAttribute("id") + "NotFound";
-          var statusText = this._strings.getFormattedString(errorPropertyName, 
+          var statusText = this._strings.getFormattedString(errorPropertyName,
                                                             [this.update_name]);
           this._setMessageValue(statusText);
           this.setAttribute("state", "error");
           var e = document.createEvent("Events");
           e.initEvent("load", false, true);
           this.dispatchEvent(e);
         ]]></body>
       </method>
@@ -146,61 +146,61 @@
         ]]></body>
       </method>
 
       <property name="url">
         <getter><![CDATA[
           return this.getAttribute("url");
         ]]></getter>
         <setter><![CDATA[
-          if (this._remoteProgressListener) 
+          if (this._remoteProgressListener)
             this._content.webProgress
                 .removeProgressListener(this._remoteProgressListener);
 
           var self = this;
 
           this._remoteProgressListener = {
-            QueryInterface: function(aIID) 
+            QueryInterface: function(aIID)
             {
               if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
                   aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
                   aIID.equals(Components.interfaces.nsISupports))
                 return this;
               throw Components.results.NS_NOINTERFACE;
             },
             onLocationChange: function() {},
             onProgressChange: function() {},
             onStatusChange:   function() {},
             onSecurityChange: function() {},
-            onStateChange:    function(aWebProgress, aRequest, 
-                                       aStateFlags, aStatus) 
+            onStateChange:    function(aWebProgress, aRequest,
+                                       aStateFlags, aStatus)
             {
               if (!aRequest)
                 return;
 
-              const nsIWebProgressListener = 
+              const nsIWebProgressListener =
                 Components.interfaces.nsIWebProgressListener;
- 
-              if (aStateFlags & nsIWebProgressListener.STATE_IS_NETWORK) 
+
+              if (aStateFlags & nsIWebProgressListener.STATE_IS_NETWORK)
               {
-                if (aStateFlags & nsIWebProgressListener.STATE_START) 
+                if (aStateFlags & nsIWebProgressListener.STATE_START)
                   self.onStart();
                 else if (aStateFlags & nsIWebProgressListener.STATE_STOP)
                 {
                   const nsIHttpChannel = Components.interfaces.nsIHttpChannel;
                   try {
                     var channel = aRequest.QueryInterface(nsIHttpChannel);
-                    if (channel.requestSucceeded) 
+                    if (channel.requestSucceeded)
                     {
                       // if we get here, the load was OK, report success
                       self.onLoad();
                       return;
                     }
                   }
-                  catch (ex) 
+                  catch (ex)
                   {
                     // the channel.requestSucceeded can throw
                     // NS_ERROR_NOT_AVAILABLE if you can't reach the server
                     // so we treat that as an error
                   }
 
                   // everything else (like a 404) is an error
                   self.onError();
--- a/toolkit/mozapps/update/tests/unit_aus_update/downloadCompleteAfterPartialFailure.js
+++ b/toolkit/mozapps/update/tests/unit_aus_update/downloadCompleteAfterPartialFailure.js
@@ -54,13 +54,13 @@ const WindowWatcher = {
         let text = gUpdateBundle.formatStringFromName("updaterIOErrorMsg",
                                                       [Services.appinfo.name,
                                                        Services.appinfo.name], 2);
         Assert.equal(aText, text,
                      "the ui string for message" + MSG_SHOULD_EQUAL);
 
         doTestFinish();
       }
-    }; 
+    };
   },
 
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIWindowWatcher])
 };
--- a/toolkit/mozapps/update/tests/unit_aus_update/updateManagerXML.js
+++ b/toolkit/mozapps/update/tests/unit_aus_update/updateManagerXML.js
@@ -8,17 +8,17 @@ function run_test() {
 
   debugDump("testing addition of a successful update to " + FILE_UPDATES_DB +
             " and verification of update properties including the format " +
             "prior to bug 530872");
 
   setUpdateChannel("test_channel");
 
   // XXXrstrong - not specifying a detailsURL will cause a leak due to bug 470244
-  // and until bug 470244 is fixed this will not test the value for detailsURL 
+  // and until bug 470244 is fixed this will not test the value for detailsURL
   // when it isn't specified in the update xml.
   let patches = getLocalPatchString("partial", "http://partial/", "SHA256",
                                     "cd43", "86", "true", STATE_PENDING);
   let updates = getLocalUpdateString(patches, "major", "New", "version 4",
                                      "4.0", "4.0", "20070811053724",
                                      "http://details1/", "http://billboard1/",
                                      "http://license1/", "http://service1/",
                                      "1238441300314", "test status text",
--- a/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseStageSuccessComplete_unix.js
+++ b/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseStageSuccessComplete_unix.js
@@ -108,17 +108,17 @@ function runHelperProcess(args) {
                "the helper process exit value should be 0");
 }
 
 function createSymlink() {
   let args = ["setup-symlink", "moz-foo", "moz-bar", "target",
               getApplyDirFile().path + "/" + DIR_RESOURCES + "link"];
   runHelperProcess(args);
   getApplyDirFile(DIR_RESOURCES + "link", false).permissions = 0o666;
-  
+
   args = ["setup-symlink", "moz-foo2", "moz-bar2", "target2",
           getApplyDirFile().path +"/" + DIR_RESOURCES + "link2", "change-perm"];
   runHelperProcess(args);
 }
 
 function removeSymlink() {
   let args = ["remove-symlink", "moz-foo", "moz-bar", "target",
               getApplyDirFile().path + "/" + DIR_RESOURCES + "link"];
--- a/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessComplete.js
+++ b/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessComplete.js
@@ -110,17 +110,17 @@ function runHelperProcess(args) {
                "the helper process exit value should be 0");
 }
 
 function createSymlink() {
   let args = ["setup-symlink", "moz-foo", "moz-bar", "target",
               getApplyDirFile().path + "/" + DIR_RESOURCES + "link"];
   runHelperProcess(args);
   getApplyDirFile(DIR_RESOURCES + "link", false).permissions = 0o666;
-  
+
   args = ["setup-symlink", "moz-foo2", "moz-bar2", "target2",
           getApplyDirFile().path + "/" + DIR_RESOURCES + "link2", "change-perm"];
   runHelperProcess(args);
 }
 
 function removeSymlink() {
   let args = ["remove-symlink", "moz-foo", "moz-bar", "target",
               getApplyDirFile().path + "/" + DIR_RESOURCES + "link"];
--- a/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessCompleteSvc.js
+++ b/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessCompleteSvc.js
@@ -120,17 +120,17 @@ function runHelperProcess(args) {
                "the helper process exit value should be 0");
 }
 
 function createSymlink() {
   let args = ["setup-symlink", "moz-foo", "moz-bar", "target",
               getApplyDirFile().path + "/" + DIR_RESOURCES + "link"];
   runHelperProcess(args);
   getApplyDirFile(DIR_RESOURCES + "link", false).permissions = 0o666;
-  
+
   args = ["setup-symlink", "moz-foo2", "moz-bar2", "target2",
           getApplyDirFile().path + "/" + DIR_RESOURCES + "link2", "change-perm"];
   runHelperProcess(args);
 }
 
 function removeSymlink() {
   let args = ["remove-symlink", "moz-foo", "moz-bar", "target",
               getApplyDirFile().path + "/" + DIR_RESOURCES + "link"];
--- a/toolkit/obsolete/content/dialogOverlay.js
+++ b/toolkit/obsolete/content/dialogOverlay.js
@@ -7,63 +7,63 @@ var doCancelFunction = 0;
 var doButton2Function = 0;
 var doButton3Function = 0;
 
 // call this from dialog onload() to allow ok and cancel to call your code
 // functions should return true if they want the dialog to close
 function doSetOKCancel(okFunc, cancelFunc, button2Func, button3Func )
 {
 	//dump("top.window.navigator.platform: " + top.window.navigator.platform + "\n");
-	
+
 	doOKFunction = okFunc;
 	doCancelFunction = cancelFunc;
 	doButton2Function = button2Func;
 	doButton3Function = button3Func;
 }
 
 function doOKButton()
 {
 	var close = true;
-	
+
 	if ( doOKFunction )
 		close = doOKFunction();
-	
+
 	if (close && top)
 		top.window.close();
 }
 
 function doCancelButton()
 {
 	var close = true;
-	
+
 	if ( doCancelFunction )
 		close = doCancelFunction();
-	
+
 	if (close && top)
 		top.window.close();
 }
 
 function doButton2()
 {
 	var close = true;
-	
+
 	if ( doButton2Function )
 		close = doButton2Function();
-	
+
 	if (close && top)
 		top.window.close();
 }
 
 function doButton3()
 {
 	var close = true;
-	
+
 	if ( doButton3Function )
 		close = doButton3Function();
-	
+
 	if (close && top)
 		top.window.close();
 }
 
 function moveToAlertPosition()
 {
     // hack. we need this so the window has something like its final size
     if (window.outerWidth == 1) {
@@ -95,13 +95,13 @@ function moveToAlertPosition()
 
 	window.moveTo( newX, newY );
 }
 
 function centerWindowOnScreen()
 {
 	var xOffset = screen.availWidth/2 - window.outerWidth/2;
 	var yOffset = screen.availHeight/2 - window.outerHeight/2; //(opener.outerHeight *2)/10;
-	
+
 	xOffset = ( xOffset > 0 ) ? xOffset : 0;
   yOffset = ( yOffset > 0 ) ? yOffset : 0;
 	window.moveTo( xOffset, yOffset);
 }
--- a/toolkit/obsolete/content/nsClipboard.js
+++ b/toolkit/obsolete/content/nsClipboard.js
@@ -1,64 +1,64 @@
 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-/** 
+/**
  * nsClipboard - wrapper around nsIClipboard and nsITransferable
- *               that simplifies access to the clipboard. 
- **/ 
+ *               that simplifies access to the clipboard.
+ **/
 var nsClipboard = {
   _CB: null,
   get mClipboard()
     {
-      if (!this._CB) 
+      if (!this._CB)
         {
           const kCBContractID = "@mozilla.org/widget/clipboard;1";
           const kCBIID = Components.interfaces.nsIClipboard;
           this._CB = Components.classes[kCBContractID].getService(kCBIID);
         }
       return this._CB;
     },
-    
+
   currentClipboard: null,
-  /** 
+  /**
    * Array/Object read (Object aFlavourList, long aClipboard, Bool aAnyFlag) ;
    *
    * returns the data in the clipboard
-   * 
+   *
    * @param FlavourSet aFlavourSet
    *        formatted list of desired flavours
    * @param long aClipboard
    *        the clipboard to read data from (kSelectionClipboard/kGlobalClipboard)
    * @param Bool aAnyFlag
    *        should be false.
    **/
   read: function (aFlavourList, aClipboard, aAnyFlag)
     {
       this.currentClipboard = aClipboard;
       var data = nsTransferable.get(aFlavourList, this.getClipboardTransferable, aAnyFlag);
       return data.first.first;  // only support one item
     },
-    
+
   /**
    * nsISupportsArray getClipboardTransferable (Object aFlavourList) ;
-   * 
+   *
    * returns a nsISupportsArray of the item on the clipboard
    *
    * @param Object aFlavourList
    *        formatted list of desired flavours.
    **/
   getClipboardTransferable: function (aFlavourList)
     {
       const supportsContractID = "@mozilla.org/supports-array;1";
       const supportsIID = Components.interfaces.nsISupportsArray;
       var supportsArray = Components.classes[supportsContractID].createInstance(supportsIID);
       var trans = nsTransferable.createTransferable();
-      for (var flavour in aFlavourList) 
+      for (var flavour in aFlavourList)
         trans.addDataFlavor(flavour);
       nsClipboard.mClipboard.getData(trans, nsClipboard.currentClipboard)
       supportsArray.AppendElement(trans);
       return supportsArray;
     }
 };
 
--- a/toolkit/obsolete/content/nsUserSettings.js
+++ b/toolkit/obsolete/content/nsUserSettings.js
@@ -11,78 +11,78 @@ var nsPreferences = {
   get mPrefService()
     {
       return Components.classes["@mozilla.org/preferences-service;1"]
                        .getService(Components.interfaces.nsIPrefBranch);
     },
 
   setBoolPref: function (aPrefName, aPrefValue)
     {
-      try 
+      try
         {
           this.mPrefService.setBoolPref(aPrefName, aPrefValue);
         }
       catch(e)
         {
         }
     },
-  
+
   getBoolPref: function (aPrefName, aDefVal)
     {
       try
         {
           return this.mPrefService.getBoolPref(aPrefName);
         }
       catch(e)
         {
           return aDefVal != undefined ? aDefVal : null;
         }
       return null;        // quiet warnings
     },
-  
+
   setUnicharPref: function (aPrefName, aPrefValue)
     {
       try
         {
           var str = Components.classes["@mozilla.org/supports-string;1"]
                               .createInstance(Components.interfaces.nsISupportsString);
           str.data = aPrefValue;
           this.mPrefService.setComplexValue(aPrefName,
                                             Components.interfaces.nsISupportsString, str);
         }
       catch(e)
         {
         }
     },
-  
+
   copyUnicharPref: function (aPrefName, aDefVal)
     {
       try
         {
           return this.mPrefService.getComplexValue(aPrefName,
                                                    Components.interfaces.nsISupportsString).data;
         }
       catch(e)
         {
           return aDefVal != undefined ? aDefVal : null;
         }
       return null;        // quiet warnings
     },
-    
+
   setIntPref: function (aPrefName, aPrefValue)
     {
       try
         {
           this.mPrefService.setIntPref(aPrefName, aPrefValue);
         }
       catch(e)
         {
         }
     },
-  
+
   getIntPref: function (aPrefName, aDefVal)
     {
       try
         {
           return this.mPrefService.getIntPref(aPrefName);
         }
       catch(e)
         {
--- a/toolkit/obsolete/content/strres.js
+++ b/toolkit/obsolete/content/strres.js
@@ -6,23 +6,23 @@ var strBundleService = null;
 
 function srGetStrBundle(path)
 {
   var strBundle = null;
 
   if (!strBundleService) {
       try {
           strBundleService =
-              Components.classes["@mozilla.org/intl/stringbundle;1"].getService(); 
-          strBundleService = 
+              Components.classes["@mozilla.org/intl/stringbundle;1"].getService();
+          strBundleService =
               strBundleService.QueryInterface(Components.interfaces.nsIStringBundleService);
       } catch (ex) {
           dump("\n--** strBundleService failed: " + ex + "\n");
           return null;
       }
   }
 
-  strBundle = strBundleService.createBundle(path); 
+  strBundle = strBundleService.createBundle(path);
   if (!strBundle) {
 	dump("\n--** strBundle createInstance failed **--\n");
   }
   return strBundle;
 }
--- a/toolkit/profile/content/createProfileWizard.js
+++ b/toolkit/profile/content/createProfileWizard.js
@@ -18,17 +18,17 @@ var gOldProfileName;
 // The directory where the profile will be created.
 var gProfileRoot;
 
 // Text node to display the location and name of the profile to create.
 var gProfileDisplay;
 
 // Called once when the wizard is opened.
 function initWizard()
-{ 
+{
   try {
     gProfileService = C[ToolkitProfileService].getService(I.nsIToolkitProfileService);
     gProfileManagerBundle = document.getElementById("bundle_profileManager");
 
     var dirService = C["@mozilla.org/file/directory_service;1"].getService(I.nsIProperties);
     gDefaultProfileParent = dirService.get("DefProfRt", I.nsIFile);
 
     gOldProfileName = document.getElementById("profileName").value;
@@ -39,17 +39,17 @@ function initWizard()
   }
   catch(e) {
     window.close();
     throw (e);
   }
 }
 
 // Called every time the second wizard page is displayed.
-function initSecondWizardPage() 
+function initSecondWizardPage()
 {
   var profileName = document.getElementById("profileName");
   profileName.select();
   profileName.focus();
 
   // Initialize profile name validation.
   checkCurrentInput(profileName.value);
 }
@@ -82,17 +82,17 @@ function updateProfileDisplay()
 {
   gProfileDisplay.data = gProfileRoot.path;
 }
 
 // Invoke a folder selection dialog for choosing the directory of profile storage.
 function chooseProfileFolder()
 {
   var newProfileRoot;
-  
+
   var dirChooser = C["@mozilla.org/filepicker;1"].createInstance(I.nsIFilePicker);
   dirChooser.init(window, gProfileManagerBundle.getString("chooseFolder"),
                   I.nsIFilePicker.modeGetFolder);
   dirChooser.appendFilters(I.nsIFilePicker.filterAll);
 
   // default to the Profiles folder
   dirChooser.displayDirectory = gDefaultProfileParent;
 
@@ -186,17 +186,17 @@ function profileExists(aName)
 }
 
 // Called when the first wizard page is shown.
 function enableNextButton()
 {
   document.documentElement.canAdvance = true;
 }
 
-function onFinish() 
+function onFinish()
 {
   var profileName = document.getElementById("profileName").value;
   var profile;
 
   // Create profile named profileName in profileRoot.
   try {
     profile = gProfileService.createProfile(gProfileRoot, profileName);
   }