From 2903e378ec434b3e9d22a8e3150c4583426dd0b2 Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Wed, 24 Feb 2016 13:11:00 +0100 Subject: [PATCH 01/60] Bug 1226879 - Fix census tree sorting issue with inverted allocation stack breakdown; r=jimb --- devtools/shared/heapsnapshot/CensusUtils.js | 2 +- .../shared/heapsnapshot/census-tree-node.js | 24 +++---- .../tests/unit/test_census_filtering_05.js | 71 +++++++++++++++++++ .../heapsnapshot/tests/unit/xpcshell.ini | 1 + 4 files changed, 85 insertions(+), 13 deletions(-) create mode 100644 devtools/shared/heapsnapshot/tests/unit/test_census_filtering_05.js diff --git a/devtools/shared/heapsnapshot/CensusUtils.js b/devtools/shared/heapsnapshot/CensusUtils.js index 63bf494e211f..d9fd3994f464 100644 --- a/devtools/shared/heapsnapshot/CensusUtils.js +++ b/devtools/shared/heapsnapshot/CensusUtils.js @@ -359,7 +359,7 @@ function diff(breakdown, startCensus, endCensus) { walk(breakdown, startCensus, visitor); return visitor.results(); }; -exports.diff = diff +exports.diff = diff; /** * Creates a hash map mapping node IDs to its parent node. diff --git a/devtools/shared/heapsnapshot/census-tree-node.js b/devtools/shared/heapsnapshot/census-tree-node.js index 440e3194fd55..bda8b65d6316 100644 --- a/devtools/shared/heapsnapshot/census-tree-node.js +++ b/devtools/shared/heapsnapshot/census-tree-node.js @@ -520,18 +520,6 @@ function invert(tree) { path.pop(); }(tree)); - // Next, do a depth-first search of the inverted tree and ensure that siblings - // are sorted by their self bytes/count. - - (function ensureSorted(node) { - if (node.children) { - node.children.sort(compareBySelf); - for (let i = 0, length = node.children.length; i < length; i++) { - ensureSorted(node.children[i]); - } - } - }(inverted.node)); - // Ensure that the root node always has the totals. inverted.node.totalBytes = tree.totalBytes; inverted.node.totalCount = tree.totalCount; @@ -677,5 +665,17 @@ exports.censusReportToCensusTreeNode = function (breakdown, report, result.totalCount = report[basisTotalCount]; } + // Inverting and filtering could have messed up the sort order, so do a + // depth-first search of the tree and ensure that siblings are sorted. + const comparator = options.invert ? compareBySelf : compareByTotal; + (function ensureSorted(node) { + if (node.children) { + node.children.sort(comparator); + for (let i = 0, length = node.children.length; i < length; i++) { + ensureSorted(node.children[i]); + } + } + }(result)); + return result; }; diff --git a/devtools/shared/heapsnapshot/tests/unit/test_census_filtering_05.js b/devtools/shared/heapsnapshot/tests/unit/test_census_filtering_05.js new file mode 100644 index 000000000000..1d1f4fa550b4 --- /dev/null +++ b/devtools/shared/heapsnapshot/tests/unit/test_census_filtering_05.js @@ -0,0 +1,71 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that filtered and inverted allocation stack census trees are sorted +// properly. + +function run_test() { + const countBreakdown = { by: "count", count: true, bytes: true }; + + const BREAKDOWN = { + by: "allocationStack", + then: countBreakdown, + noStack: countBreakdown, + }; + + const stacks = []; + + function foo(depth = 1) { + stacks.push(saveStack(depth)); + bar(depth + 1); + baz(depth + 1); + stacks.push(saveStack(depth)); + } + + function bar(depth = 1) { + stacks.push(saveStack(depth)); + stacks.push(saveStack(depth)); + } + + function baz(depth = 1) { + stacks.push(saveStack(depth)); + bang(depth + 1); + stacks.push(saveStack(depth)); + } + + function bang(depth = 1) { + stacks.push(saveStack(depth)); + stacks.push(saveStack(depth)); + stacks.push(saveStack(depth)); + } + + foo(); + bar(); + baz(); + bang(); + + const REPORT = new Map(stacks.map((s, i) => { + return [s, { + count: i + 1, + bytes: (i + 1) * 10 + }]; + })); + + const tree = censusReportToCensusTreeNode(BREAKDOWN, REPORT, { + filter: "baz", + invert: true + }); + + dumpn("tree = " + JSON.stringify(tree, savedFrameReplacer, 4)); + + (function assertSortedBySelf(node) { + if (node.children) { + let lastSelfBytes = Infinity; + for (let child of node.children) { + ok(child.bytes <= lastSelfBytes, `${child.bytes} <= ${lastSelfBytes}`); + lastSelfBytes = child.bytes; + assertSortedBySelf(child); + } + } + }(tree)); +} diff --git a/devtools/shared/heapsnapshot/tests/unit/xpcshell.ini b/devtools/shared/heapsnapshot/tests/unit/xpcshell.ini index 762933e4f85f..f499668867b5 100644 --- a/devtools/shared/heapsnapshot/tests/unit/xpcshell.ini +++ b/devtools/shared/heapsnapshot/tests/unit/xpcshell.ini @@ -21,6 +21,7 @@ support-files = [test_census_filtering_02.js] [test_census_filtering_03.js] [test_census_filtering_04.js] +[test_census_filtering_05.js] [test_census-tree-node-01.js] [test_census-tree-node-02.js] [test_census-tree-node-03.js] From 6277bcf9dd410fe2256351bfe2b6282360906492 Mon Sep 17 00:00:00 2001 From: Jared Wein Date: Thu, 25 Feb 2016 00:30:37 -0500 Subject: [PATCH 02/60] Bug 1251107 - Move the mouseout code to popupHideFn(). r=gijs The mouseout code triggers the hiding of the popup, but it was previously in the popupEditFn meaning that it ran before we expected the popup to close, which caused this race condition. I also had to tweak the contextmenu test because it was depending on a mousedown/click which we are no longer listening for (we replaced that with mouseover/mouseout). MozReview-Commit-ID: 5mZujGuto5g --HG-- extra : transplant_source : %A6X%9A%40%FD%7C%5C%F2gC%B1%1Bv%CF%F4%D5%B7%26q%7E --- .../content/test/general/browser_bookmark_popup.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/browser/base/content/test/general/browser_bookmark_popup.js b/browser/base/content/test/general/browser_bookmark_popup.js index 61ddfe7ccd62..fe031c06773a 100644 --- a/browser/base/content/test/general/browser_bookmark_popup.js +++ b/browser/base/content/test/general/browser_bookmark_popup.js @@ -51,6 +51,7 @@ function* test_bookmarks_popup({isNewBookmark, popupShowFn, popupEditFn, if (!shouldAutoClose) { yield new Promise(resolve => setTimeout(resolve, 400)); + is(bookmarkPanel.state, "open", "Panel should still be 'open' for non-autoclose"); } let hiddenPromise = promisePopupHidden(bookmarkPanel); @@ -144,7 +145,8 @@ add_task(function* panel_shown_for_new_bookmarks_mouseover_mouseout() { yield new Promise(resolve => setTimeout(resolve, 400)); is(bookmarkPanel.state, "open", "Panel should still be open on mouseover"); - + }, + *popupHideFn() { let mouseOutPromise = new Promise(resolve => { bookmarkPanel.addEventListener("mouseout", function onmouseout() { bookmarkPanel.removeEventListener("mouseout", onmouseout); @@ -158,7 +160,7 @@ add_task(function* panel_shown_for_new_bookmarks_mouseover_mouseout() { yield mouseOutPromise; info("Got mouseout event, should autoclose now"); }, - shouldAutoClose: true, + shouldAutoClose: false, isBookmarkRemoved: false, }); }); @@ -208,7 +210,7 @@ add_task(function* panel_shown_for_new_bookmark_keypress_no_autoclose() { }); }); -add_task(function* contextmenu_new_bookmark_click_no_autoclose() { +add_task(function* contextmenu_new_bookmark_keypress_no_autoclose() { yield test_bookmarks_popup({ isNewBookmark: true, *popupShowFn(browser) { @@ -227,7 +229,7 @@ add_task(function* contextmenu_new_bookmark_click_no_autoclose() { yield awaitPopupHidden; }, popupEditFn() { - bookmarkPanelTitle.click(); + EventUtils.sendChar("VK_TAB", window); }, shouldAutoClose: false, popupHideFn() { From 6a0c1db7092a057b10ff4f5ff9de9b6becd03da2 Mon Sep 17 00:00:00 2001 From: Benjamin Chen Date: Mon, 15 Feb 2016 13:54:49 +0800 Subject: [PATCH 03/60] Bug 1237545 - Remove RtspMediaCodecDecoder. r=bwu --- dom/media/omx/RtspMediaCodecDecoder.cpp | 56 ------------------------- dom/media/omx/RtspMediaCodecDecoder.h | 31 -------------- 2 files changed, 87 deletions(-) delete mode 100644 dom/media/omx/RtspMediaCodecDecoder.cpp delete mode 100644 dom/media/omx/RtspMediaCodecDecoder.h diff --git a/dom/media/omx/RtspMediaCodecDecoder.cpp b/dom/media/omx/RtspMediaCodecDecoder.cpp deleted file mode 100644 index 51f1d2b626aa..000000000000 --- a/dom/media/omx/RtspMediaCodecDecoder.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim:set ts=2 sw=2 sts=2 et cindent: */ -/* 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/. */ - -#include "RtspMediaCodecDecoder.h" - -#include "MediaDecoderStateMachine.h" -#include "RtspMediaResource.h" -#include "RtspMediaCodecReader.h" - -namespace mozilla { - -MediaDecoder* -RtspMediaCodecDecoder::Clone(MediaDecoderOwner* aOwner) -{ - return new RtspMediaCodecDecoder(aOwner); -} - -MediaOmxCommonReader* -RtspMediaCodecDecoder::CreateReader() -{ - return new RtspMediaCodecReader(this); -} - -MediaDecoderStateMachine* -RtspMediaCodecDecoder::CreateStateMachineFromReader(MediaOmxCommonReader* aReader) -{ - return new MediaDecoderStateMachine(this, aReader, - mResource->IsRealTime()); -} - -void -RtspMediaCodecDecoder::ChangeState(PlayState aState) -{ - MOZ_ASSERT(NS_IsMainThread()); - - MediaDecoder::ChangeState(aState); - - // Notify RTSP controller if the play state is ended. - // This is necessary for RTSP controller to transit its own state. - if (mPlayState == PLAY_STATE_ENDED) { - RefPtr resource = mResource->GetRtspPointer(); - if (resource) { - nsIStreamingProtocolController* controller = - resource->GetMediaStreamController(); - if (controller) { - controller->PlaybackEnded(); - } - } - } -} - -} // namespace mozilla - diff --git a/dom/media/omx/RtspMediaCodecDecoder.h b/dom/media/omx/RtspMediaCodecDecoder.h deleted file mode 100644 index e64f3f1b762c..000000000000 --- a/dom/media/omx/RtspMediaCodecDecoder.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim:set ts=2 sw=2 sts=2 et cindent: */ -/* 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/. */ - -#if !defined(RtspMediaCodecDecoder_h_) -#define RtspMediaCodecDecoder_h_ - -#include "MediaOmxCommonDecoder.h" - -namespace mozilla { - -class RtspMediaCodecDecoder final : public MediaOmxCommonDecoder -{ -public: - explicit RtspMediaCodecDecoder(MediaDecoderOwner* aOwner) - : MediaOmxCommonDecoder(aOwner) {} - - MediaDecoder* Clone(MediaDecoderOwner* aOwner) override; - - MediaOmxCommonReader* CreateReader() override; - - MediaDecoderStateMachine* CreateStateMachineFromReader(MediaOmxCommonReader* aReader) override; - - void ChangeState(PlayState aState) override; -}; - -} // namespace mozilla - -#endif From 03b4f36e02e76c046eb165b9aa8a6b89e02447af Mon Sep 17 00:00:00 2001 From: Chris H-C Date: Mon, 22 Feb 2016 16:13:02 -0500 Subject: [PATCH 04/60] Bug 1219768 - make histogram_tools' whitelist file generic. r=gfritzsche Future-proofing. MozReview-Commit-ID: Jz41SWRK0bK --HG-- extra : transplant_source : %87%C8%87%0A%88Q%CA%00I%8F4%29%C2%DD%60o%D6%B7-w --- .../telemetry/bucket-whitelist.json | 189 ----------------- .../telemetry/histogram-whitelists.json | 191 ++++++++++++++++++ .../components/telemetry/histogram_tools.py | 18 +- 3 files changed, 201 insertions(+), 197 deletions(-) delete mode 100644 toolkit/components/telemetry/bucket-whitelist.json create mode 100644 toolkit/components/telemetry/histogram-whitelists.json diff --git a/toolkit/components/telemetry/bucket-whitelist.json b/toolkit/components/telemetry/bucket-whitelist.json deleted file mode 100644 index 7cc352ec07b5..000000000000 --- a/toolkit/components/telemetry/bucket-whitelist.json +++ /dev/null @@ -1,189 +0,0 @@ -[ - "MEMORY_JS_MAIN_RUNTIME_TEMPORARY_PEAK", - "MEMORY_JS_GC_HEAP", - "MEMORY_HEAP_ALLOCATED", - "SYSTEM_FONT_FALLBACK_SCRIPT", - "HTTP_REQUEST_PER_PAGE_FROM_CACHE", - "SSL_TIME_UNTIL_READY", - "SSL_TIME_UNTIL_HANDSHAKE_FINISHED", - "CERT_VALIDATION_HTTP_REQUEST_CANCELED_TIME", - "CERT_VALIDATION_HTTP_REQUEST_SUCCEEDED_TIME", - "CERT_VALIDATION_HTTP_REQUEST_FAILED_TIME", - "SSL_OBSERVED_END_ENTITY_CERTIFICATE_LIFETIME", - "SPDY_SERVER_INITIATED_STREAMS", - "STS_POLL_AND_EVENTS_CYCLE", - "STS_POLL_CYCLE", - "STS_POLL_AND_EVENT_THE_LAST_CYCLE", - "STS_POLL_BLOCK_TIME", - "PRCONNECT_BLOCKING_TIME_NORMAL", - "PRCONNECT_BLOCKING_TIME_SHUTDOWN", - "PRCONNECT_BLOCKING_TIME_CONNECTIVITY_CHANGE", - "PRCONNECT_BLOCKING_TIME_LINK_CHANGE", - "PRCONNECT_BLOCKING_TIME_OFFLINE", - "PRCONNECTCONTINUE_BLOCKING_TIME_NORMAL", - "PRCONNECTCONTINUE_BLOCKING_TIME_SHUTDOWN", - "PRCONNECTCONTINUE_BLOCKING_TIME_CONNECTIVITY_CHANGE", - "PRCONNECTCONTINUE_BLOCKING_TIME_LINK_CHANGE", - "PRCONNECTCONTINUE_BLOCKING_TIME_OFFLINE", - "PRCLOSE_TCP_BLOCKING_TIME_NORMAL", - "PRCLOSE_TCP_BLOCKING_TIME_SHUTDOWN", - "PRCLOSE_TCP_BLOCKING_TIME_CONNECTIVITY_CHANGE", - "PRCLOSE_TCP_BLOCKING_TIME_LINK_CHANGE", - "PRCLOSE_TCP_BLOCKING_TIME_OFFLINE", - "PRCLOSE_UDP_BLOCKING_TIME_NORMAL", - "PRCLOSE_UDP_BLOCKING_TIME_SHUTDOWN", - "PRCLOSE_UDP_BLOCKING_TIME_CONNECTIVITY_CHANGE", - "PRCLOSE_UDP_BLOCKING_TIME_LINK_CHANGE", - "PRCLOSE_UDP_BLOCKING_TIME_OFFLINE", - "UPDATE_PREF_UPDATE_CANCELATIONS_EXTERNAL", - "UPDATE_PREF_UPDATE_CANCELATIONS_NOTIFY", - "UPDATE_STATUS_ERROR_CODE_COMPLETE_STARTUP", - "UPDATE_STATUS_ERROR_CODE_PARTIAL_STARTUP", - "UPDATE_STATUS_ERROR_CODE_UNKNOWN_STARTUP", - "UPDATE_STATUS_ERROR_CODE_COMPLETE_STAGE", - "UPDATE_STATUS_ERROR_CODE_PARTIAL_STAGE", - "UPDATE_STATUS_ERROR_CODE_UNKNOWN_STAGE", - "SECURITY_UI", - "CRASH_STORE_COMPRESSED_BYTES", - "SHUMWAY_FEATURE_USED", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_RELOAD_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_RELOAD_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_NAVIGATETO_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_NAVIGATETO_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_EVENTLISTENERS_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_EVENTLISTENERS_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_DETACH_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_DETACH_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_RESUME_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_RESUME_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_INTERRUPT_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_INTERRUPT_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_CLIENTEVALUATE_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_CLIENTEVALUATE_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_RELEASEMANY_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_RELEASEMANY_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_THREADGRIPS_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_THREADGRIPS_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_SOURCES_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_SOURCES_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_FRAMES_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_FRAMES_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_PARAMETERNAMES_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_PARAMETERNAMES_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_OWNPROPERTYNAMES_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_OWNPROPERTYNAMES_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOTYPEANDPROPERTIES_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOTYPEANDPROPERTIES_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_ENUMPROPERTIES_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_ENUMPROPERTIES_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOTYPESANDPROPERTIES_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOTYPESANDPROPERTIES_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROPERTY_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROPERTY_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOTYPE_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOTYPE_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_DISPLAYSTRING_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_DISPLAYSTRING_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_SUBSTRING_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_SUBSTRING_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_RELEASE_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_RELEASE_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTTABS_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTTABS_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOCOLDESCRIPTION_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOCOLDESCRIPTION_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTADDONS_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTADDONS_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTWORKERS_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTWORKERS_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTPROCESSES_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTPROCESSES_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_DELETE_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_DELETE_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_THREADDETACH_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_THREADDETACH_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_ADDONDETACH_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_ADDONDETACH_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_TABDETACH_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_TABDETACH_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_WORKERDETACH_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_WORKERDETACH_MS", - "DEVTOOLS_DEBUGGER_DISPLAY_SOURCE_LOCAL_MS", - "DEVTOOLS_DEBUGGER_DISPLAY_SOURCE_REMOTE_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_RECONFIGURETAB_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_RECONFIGURETAB_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_RECONFIGURETHREAD_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_RECONFIGURETHREAD_MS", - "MEDIA_WMF_DECODE_ERROR", - "VIDEO_CANPLAYTYPE_H264_CONSTRAINT_SET_FLAG", - "VIDEO_CANPLAYTYPE_H264_PROFILE", - "VIDEO_DECODED_H264_SPS_CONSTRAINT_SET_FLAG", - "VIDEO_DECODED_H264_SPS_PROFILE", - "WEBRTC_CANDIDATE_TYPES_GIVEN_SUCCESS", - "WEBRTC_CANDIDATE_TYPES_GIVEN_FAILURE", - "WEBRTC_AVSYNC_WHEN_AUDIO_LAGS_VIDEO_MS", - "WEBRTC_AVSYNC_WHEN_VIDEO_LAGS_AUDIO_MS", - "WEBRTC_VIDEO_QUALITY_INBOUND_BANDWIDTH_KBITS", - "WEBRTC_AUDIO_QUALITY_INBOUND_BANDWIDTH_KBITS", - "WEBRTC_VIDEO_QUALITY_OUTBOUND_BANDWIDTH_KBITS", - "WEBRTC_AUDIO_QUALITY_OUTBOUND_BANDWIDTH_KBITS", - "WEBRTC_AUDIO_QUALITY_INBOUND_JITTER", - "WEBRTC_VIDEO_QUALITY_OUTBOUND_JITTER", - "WEBRTC_AUDIO_QUALITY_OUTBOUND_JITTER", - "WEBRTC_VIDEO_ERROR_RECOVERY_MS", - "WEBRTC_VIDEO_RECOVERY_BEFORE_ERROR_PER_MIN", - "WEBRTC_VIDEO_RECOVERY_AFTER_ERROR_PER_MIN", - "WEBRTC_VIDEO_QUALITY_OUTBOUND_RTT", - "WEBRTC_AUDIO_QUALITY_OUTBOUND_RTT", - "WEBRTC_CALL_DURATION", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_TRACERDETACH_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_TRACERDETACH_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_STARTTRACE_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_STARTTRACE_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_STOPTRACE_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_STOPTRACE_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_GET_EXECUTABLE_LINES_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_GET_EXECUTABLE_LINES_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_BLACKBOX_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_BLACKBOX_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_UNBLACKBOX_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_UNBLACKBOX_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_SCOPE_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_SCOPE_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_BINDINGS_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_BINDINGS_MS", - "DEVTOOLS_DEBUGGER_RDP_LOCAL_ASSIGN_MS", - "DEVTOOLS_DEBUGGER_RDP_REMOTE_ASSIGN_MS", - "DEVTOOLS_SAVE_HEAP_SNAPSHOT_MS", - "DEVTOOLS_READ_HEAP_SNAPSHOT_MS", - "DEVTOOLS_HEAP_SNAPSHOT_NODE_COUNT", - "DEVTOOLS_HEAP_SNAPSHOT_EDGE_COUNT", - "NETWORK_CACHE_HIT_RATE_PER_CACHE_SIZE", - "NETWORK_CACHE_METADATA_FIRST_READ_SIZE", - "NETWORK_CACHE_METADATA_SIZE", - "NETWORK_CACHE_HASH_STATS", - "SSL_CIPHER_SUITE_FULL", - "SSL_CIPHER_SUITE_RESUMED", - "SSL_REASONS_FOR_NOT_FALSE_STARTING", - "SSL_CERT_VERIFICATION_ERRORS", - "CERT_VALIDATION_SUCCESS_BY_CA", - "CERT_PINNING_FAILURES_BY_CA", - "CERT_PINNING_MOZ_RESULTS_BY_HOST", - "CERT_PINNING_MOZ_TEST_RESULTS_BY_HOST", - "LOOP_CANDIDATE_TYPES_GIVEN_SUCCESS", - "LOOP_CANDIDATE_TYPES_GIVEN_FAILURE", - "LOOP_VIDEO_QUALITY_INBOUND_BANDWIDTH_KBITS", - "LOOP_AUDIO_QUALITY_INBOUND_BANDWIDTH_KBITS", - "LOOP_VIDEO_QUALITY_OUTBOUND_BANDWIDTH_KBITS", - "LOOP_AUDIO_QUALITY_OUTBOUND_BANDWIDTH_KBITS", - "LOOP_VIDEO_ERROR_RECOVERY_MS", - "LOOP_VIDEO_RECOVERY_BEFORE_ERROR_PER_MIN", - "LOOP_VIDEO_RECOVERY_AFTER_ERROR_PER_MIN", - "LOOP_VIDEO_QUALITY_OUTBOUND_RTT", - "LOOP_AUDIO_QUALITY_OUTBOUND_RTT", - "LOOP_CALL_DURATION", - "GFX_CRASH", - "GC_REASON_2", - "GC_MINOR_REASON", - "GC_MINOR_REASON_LONG" -] diff --git a/toolkit/components/telemetry/histogram-whitelists.json b/toolkit/components/telemetry/histogram-whitelists.json new file mode 100644 index 000000000000..380112d6f170 --- /dev/null +++ b/toolkit/components/telemetry/histogram-whitelists.json @@ -0,0 +1,191 @@ +{ + "n_buckets": [ + "MEMORY_JS_MAIN_RUNTIME_TEMPORARY_PEAK", + "MEMORY_JS_GC_HEAP", + "MEMORY_HEAP_ALLOCATED", + "SYSTEM_FONT_FALLBACK_SCRIPT", + "HTTP_REQUEST_PER_PAGE_FROM_CACHE", + "SSL_TIME_UNTIL_READY", + "SSL_TIME_UNTIL_HANDSHAKE_FINISHED", + "CERT_VALIDATION_HTTP_REQUEST_CANCELED_TIME", + "CERT_VALIDATION_HTTP_REQUEST_SUCCEEDED_TIME", + "CERT_VALIDATION_HTTP_REQUEST_FAILED_TIME", + "SSL_OBSERVED_END_ENTITY_CERTIFICATE_LIFETIME", + "SPDY_SERVER_INITIATED_STREAMS", + "STS_POLL_AND_EVENTS_CYCLE", + "STS_POLL_CYCLE", + "STS_POLL_AND_EVENT_THE_LAST_CYCLE", + "STS_POLL_BLOCK_TIME", + "PRCONNECT_BLOCKING_TIME_NORMAL", + "PRCONNECT_BLOCKING_TIME_SHUTDOWN", + "PRCONNECT_BLOCKING_TIME_CONNECTIVITY_CHANGE", + "PRCONNECT_BLOCKING_TIME_LINK_CHANGE", + "PRCONNECT_BLOCKING_TIME_OFFLINE", + "PRCONNECTCONTINUE_BLOCKING_TIME_NORMAL", + "PRCONNECTCONTINUE_BLOCKING_TIME_SHUTDOWN", + "PRCONNECTCONTINUE_BLOCKING_TIME_CONNECTIVITY_CHANGE", + "PRCONNECTCONTINUE_BLOCKING_TIME_LINK_CHANGE", + "PRCONNECTCONTINUE_BLOCKING_TIME_OFFLINE", + "PRCLOSE_TCP_BLOCKING_TIME_NORMAL", + "PRCLOSE_TCP_BLOCKING_TIME_SHUTDOWN", + "PRCLOSE_TCP_BLOCKING_TIME_CONNECTIVITY_CHANGE", + "PRCLOSE_TCP_BLOCKING_TIME_LINK_CHANGE", + "PRCLOSE_TCP_BLOCKING_TIME_OFFLINE", + "PRCLOSE_UDP_BLOCKING_TIME_NORMAL", + "PRCLOSE_UDP_BLOCKING_TIME_SHUTDOWN", + "PRCLOSE_UDP_BLOCKING_TIME_CONNECTIVITY_CHANGE", + "PRCLOSE_UDP_BLOCKING_TIME_LINK_CHANGE", + "PRCLOSE_UDP_BLOCKING_TIME_OFFLINE", + "UPDATE_PREF_UPDATE_CANCELATIONS_EXTERNAL", + "UPDATE_PREF_UPDATE_CANCELATIONS_NOTIFY", + "UPDATE_STATUS_ERROR_CODE_COMPLETE_STARTUP", + "UPDATE_STATUS_ERROR_CODE_PARTIAL_STARTUP", + "UPDATE_STATUS_ERROR_CODE_UNKNOWN_STARTUP", + "UPDATE_STATUS_ERROR_CODE_COMPLETE_STAGE", + "UPDATE_STATUS_ERROR_CODE_PARTIAL_STAGE", + "UPDATE_STATUS_ERROR_CODE_UNKNOWN_STAGE", + "SECURITY_UI", + "CRASH_STORE_COMPRESSED_BYTES", + "SHUMWAY_FEATURE_USED", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RELOAD_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RELOAD_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_NAVIGATETO_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_NAVIGATETO_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_EVENTLISTENERS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_EVENTLISTENERS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_DETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_DETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RESUME_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RESUME_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_INTERRUPT_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_INTERRUPT_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_CLIENTEVALUATE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_CLIENTEVALUATE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RELEASEMANY_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RELEASEMANY_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_THREADGRIPS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_THREADGRIPS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_SOURCES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_SOURCES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_FRAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_FRAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PARAMETERNAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PARAMETERNAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_OWNPROPERTYNAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_OWNPROPERTYNAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOTYPEANDPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOTYPEANDPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_ENUMPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_ENUMPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOTYPESANDPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOTYPESANDPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROPERTY_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROPERTY_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOTYPE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOTYPE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_DISPLAYSTRING_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_DISPLAYSTRING_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_SUBSTRING_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_SUBSTRING_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RELEASE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RELEASE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTTABS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTTABS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOCOLDESCRIPTION_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOCOLDESCRIPTION_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTADDONS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTADDONS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTWORKERS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTWORKERS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTPROCESSES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTPROCESSES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_DELETE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_DELETE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_THREADDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_THREADDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_ADDONDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_ADDONDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_TABDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_TABDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_WORKERDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_WORKERDETACH_MS", + "DEVTOOLS_DEBUGGER_DISPLAY_SOURCE_LOCAL_MS", + "DEVTOOLS_DEBUGGER_DISPLAY_SOURCE_REMOTE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RECONFIGURETAB_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RECONFIGURETAB_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RECONFIGURETHREAD_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RECONFIGURETHREAD_MS", + "MEDIA_WMF_DECODE_ERROR", + "VIDEO_CANPLAYTYPE_H264_CONSTRAINT_SET_FLAG", + "VIDEO_CANPLAYTYPE_H264_PROFILE", + "VIDEO_DECODED_H264_SPS_CONSTRAINT_SET_FLAG", + "VIDEO_DECODED_H264_SPS_PROFILE", + "WEBRTC_CANDIDATE_TYPES_GIVEN_SUCCESS", + "WEBRTC_CANDIDATE_TYPES_GIVEN_FAILURE", + "WEBRTC_AVSYNC_WHEN_AUDIO_LAGS_VIDEO_MS", + "WEBRTC_AVSYNC_WHEN_VIDEO_LAGS_AUDIO_MS", + "WEBRTC_VIDEO_QUALITY_INBOUND_BANDWIDTH_KBITS", + "WEBRTC_AUDIO_QUALITY_INBOUND_BANDWIDTH_KBITS", + "WEBRTC_VIDEO_QUALITY_OUTBOUND_BANDWIDTH_KBITS", + "WEBRTC_AUDIO_QUALITY_OUTBOUND_BANDWIDTH_KBITS", + "WEBRTC_AUDIO_QUALITY_INBOUND_JITTER", + "WEBRTC_VIDEO_QUALITY_OUTBOUND_JITTER", + "WEBRTC_AUDIO_QUALITY_OUTBOUND_JITTER", + "WEBRTC_VIDEO_ERROR_RECOVERY_MS", + "WEBRTC_VIDEO_RECOVERY_BEFORE_ERROR_PER_MIN", + "WEBRTC_VIDEO_RECOVERY_AFTER_ERROR_PER_MIN", + "WEBRTC_VIDEO_QUALITY_OUTBOUND_RTT", + "WEBRTC_AUDIO_QUALITY_OUTBOUND_RTT", + "WEBRTC_CALL_DURATION", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_TRACERDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_TRACERDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_STARTTRACE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_STARTTRACE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_STOPTRACE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_STOPTRACE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_GET_EXECUTABLE_LINES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_GET_EXECUTABLE_LINES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_BLACKBOX_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_BLACKBOX_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_UNBLACKBOX_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_UNBLACKBOX_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_SCOPE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_SCOPE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_BINDINGS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_BINDINGS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_ASSIGN_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_ASSIGN_MS", + "DEVTOOLS_SAVE_HEAP_SNAPSHOT_MS", + "DEVTOOLS_READ_HEAP_SNAPSHOT_MS", + "DEVTOOLS_HEAP_SNAPSHOT_NODE_COUNT", + "DEVTOOLS_HEAP_SNAPSHOT_EDGE_COUNT", + "NETWORK_CACHE_HIT_RATE_PER_CACHE_SIZE", + "NETWORK_CACHE_METADATA_FIRST_READ_SIZE", + "NETWORK_CACHE_METADATA_SIZE", + "NETWORK_CACHE_HASH_STATS", + "SSL_CIPHER_SUITE_FULL", + "SSL_CIPHER_SUITE_RESUMED", + "SSL_REASONS_FOR_NOT_FALSE_STARTING", + "SSL_CERT_VERIFICATION_ERRORS", + "CERT_VALIDATION_SUCCESS_BY_CA", + "CERT_PINNING_FAILURES_BY_CA", + "CERT_PINNING_MOZ_RESULTS_BY_HOST", + "CERT_PINNING_MOZ_TEST_RESULTS_BY_HOST", + "LOOP_CANDIDATE_TYPES_GIVEN_SUCCESS", + "LOOP_CANDIDATE_TYPES_GIVEN_FAILURE", + "LOOP_VIDEO_QUALITY_INBOUND_BANDWIDTH_KBITS", + "LOOP_AUDIO_QUALITY_INBOUND_BANDWIDTH_KBITS", + "LOOP_VIDEO_QUALITY_OUTBOUND_BANDWIDTH_KBITS", + "LOOP_AUDIO_QUALITY_OUTBOUND_BANDWIDTH_KBITS", + "LOOP_VIDEO_ERROR_RECOVERY_MS", + "LOOP_VIDEO_RECOVERY_BEFORE_ERROR_PER_MIN", + "LOOP_VIDEO_RECOVERY_AFTER_ERROR_PER_MIN", + "LOOP_VIDEO_QUALITY_OUTBOUND_RTT", + "LOOP_AUDIO_QUALITY_OUTBOUND_RTT", + "LOOP_CALL_DURATION", + "GFX_CRASH", + "GC_REASON_2", + "GC_MINOR_REASON", + "GC_MINOR_REASON_LONG" + ] +} diff --git a/toolkit/components/telemetry/histogram_tools.py b/toolkit/components/telemetry/histogram_tools.py index d6e5f63df8a8..d713b6d763b0 100644 --- a/toolkit/components/telemetry/histogram_tools.py +++ b/toolkit/components/telemetry/histogram_tools.py @@ -68,16 +68,18 @@ always_allowed_keys = ['kind', 'description', 'cpp_guard', 'expires_in_version', 'alert_emails', 'keyed', 'releaseChannelCollection', 'bug_numbers'] -n_buckets_whitelist = None; +whitelists = None; try: - whitelist_path = os.path.join(os.path.abspath(os.path.realpath(os.path.dirname(__file__))), 'bucket-whitelist.json') + whitelist_path = os.path.join(os.path.abspath(os.path.realpath(os.path.dirname(__file__))), 'histogram-whitelists.json') with open(whitelist_path, 'r') as f: try: - n_buckets_whitelist = set(json.load(f)) + whitelists = json.load(f) + for name, whitelist in whitelists.iteritems(): + whitelists[name] = set(whitelist) except ValueError, e: - raise BaseException, 'error parsing bucket whitelist (%s)' % whitelist_path + raise BaseException, 'error parsing whitelist (%s)' % whitelist_path except IOError: - n_buckets_whitelist = None + whitelists = None print 'Unable to parse whitelist (%s). Assuming all histograms are acceptable.' % whitelist_path class Histogram: @@ -279,9 +281,9 @@ associated with the histogram. Returns None if no guarding is necessary.""" self._low = low self._high = high self._n_buckets = n_buckets - if n_buckets_whitelist is not None and self._n_buckets > 100 and type(self._n_buckets) is int: - if self._name not in n_buckets_whitelist: - raise KeyError, ('New histogram %s is not permitted to have more than 100 buckets. ' + if whitelists is not None and self._n_buckets > 100 and type(self._n_buckets) is int: + if self._name not in whitelists['n_buckets']: + raise KeyError, ('New histogram "%s" is not permitted to have more than 100 buckets. ' 'Histograms with large numbers of buckets use disproportionately high amounts of resources. ' 'Contact the Telemetry team (e.g. in #telemetry) if you think an exception ought to be made.' % self._name) From 910c042d19c1202c79120b10af0b43d2e020afb5 Mon Sep 17 00:00:00 2001 From: Chris H-C Date: Tue, 23 Feb 2016 10:20:28 -0500 Subject: [PATCH 05/60] Bug 1219768 - make Histograms.json's bug_numbers field mandatory. r=gfritzsche bug_numbers is now mandatory, because we really want to have some explanation about where the probe came from. We have a lot of non-bug-numbered probes (including non-Histograms.json- resident probes like the use counters) that are being "grandfathered in" via a whitelist in whitelists.json. MozReview-Commit-ID: 62dN96sEOUf --HG-- extra : transplant_source : %82%29W%5B%29J%D4kX%F8%E9%A4%97%DD%B9%7DhS%D1%CF --- .../telemetry/histogram-whitelists.json | 1497 +++++++++++++++++ .../components/telemetry/histogram_tools.py | 5 +- 2 files changed, 1501 insertions(+), 1 deletion(-) diff --git a/toolkit/components/telemetry/histogram-whitelists.json b/toolkit/components/telemetry/histogram-whitelists.json index 380112d6f170..7dacfa55ef8e 100644 --- a/toolkit/components/telemetry/histogram-whitelists.json +++ b/toolkit/components/telemetry/histogram-whitelists.json @@ -1,4 +1,1501 @@ { + "bug_numbers": [ + "A11Y_CONSUMERS", + "A11Y_IATABLE_USAGE_FLAG", + "A11Y_INSTANTIATED_FLAG", + "A11Y_ISIMPLEDOM_USAGE_FLAG", + "A11Y_UPDATE_TIME", + "ABOUT_ACCOUNTS_CONTENT_SERVER_FAILURE_TIME_MS", + "ABOUT_ACCOUNTS_CONTENT_SERVER_LOADED_RATE", + "ABOUT_ACCOUNTS_CONTENT_SERVER_LOADED_TIME_MS", + "ABOUT_ACCOUNTS_CONTENT_SERVER_LOAD_STARTED_COUNT", + "ADDON_SHIM_USAGE", + "APPLICATION_REPUTATION_COUNT", + "APPLICATION_REPUTATION_LOCAL", + "APPLICATION_REPUTATION_SERVER", + "APPLICATION_REPUTATION_SERVER_VERDICT", + "APPLICATION_REPUTATION_SHOULD_BLOCK", + "AUDIOSTREAM_FIRST_OPEN_MS", + "AUDIOSTREAM_LATER_OPEN_MS", + "AUTO_REJECTED_TRANSLATION_OFFERS", + "BACKGROUNDFILESAVER_THREAD_COUNT", + "BAD_FALLBACK_FONT", + "BLOCKED_ON_PLUGINASYNCSURROGATE_WAITFORINIT_MS", + "BLOCKED_ON_PLUGIN_INSTANCE_DESTROY_MS", + "BLOCKED_ON_PLUGIN_INSTANCE_INIT_MS", + "BLOCKED_ON_PLUGIN_MODULE_INIT_MS", + "BLOCKED_ON_PLUGIN_STREAM_INIT_MS", + "BLOCKLIST_SYNC_FILE_LOAD", + "BROWSERPROVIDER_XUL_IMPORT_BOOKMARKS", + "BROWSERPROVIDER_XUL_IMPORT_HISTORY", + "BROWSERPROVIDER_XUL_IMPORT_TIME", + "BROWSER_IS_ASSIST_DEFAULT", + "BROWSER_IS_USER_DEFAULT", + "BROWSER_IS_USER_DEFAULT_ERROR", + "BROWSER_SET_DEFAULT_ALWAYS_CHECK", + "BROWSER_SET_DEFAULT_DIALOG_PROMPT_RAWCOUNT", + "BROWSER_SET_DEFAULT_ERROR", + "BROWSER_SET_DEFAULT_RESULT", + "BROWSER_SET_DEFAULT_TIME_TO_COMPLETION_SECONDS", + "BR_9_2_1_SUBJECT_ALT_NAMES", + "BR_9_2_2_SUBJECT_COMMON_NAME", + "BUCKET_ORDER_ERRORS", + "CACHE_DEVICE_SEARCH_2", + "CACHE_DISK_SEARCH_2", + "CACHE_LM_INCONSISTENT", + "CACHE_MEMORY_SEARCH_2", + "CACHE_OFFLINE_SEARCH_2", + "CACHE_SERVICE_LOCK_WAIT_2", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_2", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSASYNCDOOMEVENT_RUN", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSBLOCKONCACHETHREADEVENT_RUN", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_CLOSE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_DOOM", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_DOOMANDFAILPENDINGREQUESTS", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETCACHEELEMENT", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETCLIENTID", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETDATASIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETDEVICEID", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETEXPIRATIONTIME", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETFETCHCOUNT", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETFILE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETKEY", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETLASTFETCHED", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETLASTMODIFIED", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETMETADATAELEMENT", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETPREDICTEDDATASIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETSECURITYINFO", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETSTORAGEDATASIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETSTORAGEPOLICY", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_ISSTREAMBASED", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_MARKVALID", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_OPENINPUTSTREAM", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_OPENOUTPUTSTREAM", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_REQUESTDATASIZECHANGE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_SETCACHEELEMENT", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_SETDATASIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_SETEXPIRATIONTIME", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_SETMETADATAELEMENT", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_SETPREDICTEDDATASIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_SETSECURITYINFO", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_SETSTORAGEPOLICY", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_VISITMETADATA", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_CLOSEALLSTREAMS", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_DISKDEVICEHEAPSIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_EVICTENTRIESFORCLIENT", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_GETCACHEIOTARGET", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_ISSTORAGEENABLEDFORPOLICY", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_ONPROFILECHANGED", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_ONPROFILESHUTDOWN", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_OPENCACHEENTRY", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_PROCESSREQUEST", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SETDISKCACHECAPACITY", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SETDISKCACHEENABLED", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SETDISKCACHEMAXENTRYSIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SETDISKSMARTSIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SETMEMORYCACHE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SETMEMORYCACHEMAXENTRYSIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SETOFFLINECACHECAPACITY", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SETOFFLINECACHEENABLED", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SHUTDOWN", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_VISITENTRIES", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCOMPRESSOUTPUTSTREAMWRAPPER_RELEASE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSDECOMPRESSINPUTSTREAMWRAPPER_RELEASE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSDISKCACHEBINDING_DESTRUCTOR", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSDISKCACHEDEVICEDEACTIVATEENTRYEVENT_RUN", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSDISKCACHEMAP_REVALIDATION", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSDISKCACHESTREAMIO_CLOSEOUTPUTSTREAM", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSDISKCACHESTREAMIO_WRITE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSDOOMEVENT_RUN", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSEVICTDISKCACHEENTRIESEVENT_RUN", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSINPUTSTREAMWRAPPER_CLOSEINTERNAL", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSINPUTSTREAMWRAPPER_LAZYINIT", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSINPUTSTREAMWRAPPER_RELEASE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSOUTPUTSTREAMWRAPPER_CLOSEINTERNAL", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSOUTPUTSTREAMWRAPPER_LAZYINIT", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSOUTPUTSTREAMWRAPPER_RELEASE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSPROCESSREQUESTEVENT_RUN", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSSETDISKSMARTSIZECALLBACK_NOTIFY", + "CANVAS_2D_USED", + "CANVAS_WEBGL_USED", + "CERT_CHAIN_KEY_SIZE_STATUS", + "CERT_CHAIN_SHA1_POLICY_STATUS", + "CERT_OCSP_ENABLED", + "CERT_OCSP_REQUIRED", + "CERT_PINNING_FAILURES_BY_CA", + "CERT_PINNING_MOZ_RESULTS", + "CERT_PINNING_MOZ_RESULTS_BY_HOST", + "CERT_PINNING_MOZ_TEST_RESULTS", + "CERT_PINNING_MOZ_TEST_RESULTS_BY_HOST", + "CERT_PINNING_RESULTS", + "CERT_PINNING_TEST_RESULTS", + "CERT_VALIDATION_HTTP_REQUEST_CANCELED_TIME", + "CERT_VALIDATION_HTTP_REQUEST_FAILED_TIME", + "CERT_VALIDATION_HTTP_REQUEST_RESULT", + "CERT_VALIDATION_HTTP_REQUEST_SUCCEEDED_TIME", + "CERT_VALIDATION_SUCCESS_BY_CA", + "CHANGES_OF_DETECTED_LANGUAGE", + "CHANGES_OF_TARGET_LANGUAGE", + "CHARSET_OVERRIDE_SITUATION", + "CHARSET_OVERRIDE_USED", + "CHECK_ADDONS_MODIFIED_MS", + "CHECK_JAVA_ENABLED", + "COMPONENTS_SHIM_ACCESSED_BY_CONTENT", + "COMPOSITE_FRAME_ROUNDTRIP_TIME", + "COMPOSITE_TIME", + "CONTENT_DOCUMENTS_DESTROYED", + "COOKIES_3RDPARTY_NUM_ATTEMPTS_ACCEPTED", + "COOKIES_3RDPARTY_NUM_ATTEMPTS_BLOCKED", + "COOKIES_3RDPARTY_NUM_SITES_ACCEPTED", + "COOKIES_3RDPARTY_NUM_SITES_BLOCKED", + "COOKIE_SCHEME_SECURITY", + "CRASH_STORE_COMPRESSED_BYTES", + "CYCLE_COLLECTOR", + "CYCLE_COLLECTOR_ASYNC_SNOW_WHITE_FREEING", + "CYCLE_COLLECTOR_COLLECTED", + "CYCLE_COLLECTOR_FINISH_IGC", + "CYCLE_COLLECTOR_FULL", + "CYCLE_COLLECTOR_MAX_PAUSE", + "CYCLE_COLLECTOR_NEED_GC", + "CYCLE_COLLECTOR_OOM", + "CYCLE_COLLECTOR_SYNC_SKIPPABLE", + "CYCLE_COLLECTOR_TIME_BETWEEN", + "CYCLE_COLLECTOR_VISITED_GCED", + "CYCLE_COLLECTOR_VISITED_REF_COUNTED", + "CYCLE_COLLECTOR_WORKER", + "CYCLE_COLLECTOR_WORKER_COLLECTED", + "CYCLE_COLLECTOR_WORKER_NEED_GC", + "CYCLE_COLLECTOR_WORKER_OOM", + "CYCLE_COLLECTOR_WORKER_VISITED_GCED", + "CYCLE_COLLECTOR_WORKER_VISITED_REF_COUNTED", + "D3D11_SYNC_HANDLE_FAILURE", + "DATABASE_LOCKED_EXCEPTION", + "DATABASE_SUCCESSFUL_UNLOCK", + "DATA_STORAGE_ENTRIES", + "DECODER_INSTANTIATED_IBM866", + "DECODER_INSTANTIATED_ISO2022JP", + "DECODER_INSTANTIATED_ISO_8859_5", + "DECODER_INSTANTIATED_KOI8R", + "DECODER_INSTANTIATED_KOI8U", + "DECODER_INSTANTIATED_MACARABIC", + "DECODER_INSTANTIATED_MACCE", + "DECODER_INSTANTIATED_MACCROATIAN", + "DECODER_INSTANTIATED_MACCYRILLIC", + "DECODER_INSTANTIATED_MACDEVANAGARI", + "DECODER_INSTANTIATED_MACFARSI", + "DECODER_INSTANTIATED_MACGREEK", + "DECODER_INSTANTIATED_MACGUJARATI", + "DECODER_INSTANTIATED_MACGURMUKHI", + "DECODER_INSTANTIATED_MACHEBREW", + "DECODER_INSTANTIATED_MACICELANDIC", + "DECODER_INSTANTIATED_MACROMANIAN", + "DECODER_INSTANTIATED_MACTURKISH", + "DEFECTIVE_PERMISSIONS_SQL_REMOVED", + "DEFERRED_FINALIZE_ASYNC", + "DENIED_TRANSLATION_OFFERS", + "DEVICE_RESET_REASON", + "DEVTOOLS_ABOUTDEBUGGING_OPENED_BOOLEAN", + "DEVTOOLS_ABOUTDEBUGGING_OPENED_PER_USER_FLAG", + "DEVTOOLS_ABOUTDEBUGGING_TIME_ACTIVE_SECONDS", + "DEVTOOLS_ANIMATIONINSPECTOR_OPENED_BOOLEAN", + "DEVTOOLS_ANIMATIONINSPECTOR_OPENED_PER_USER_FLAG", + "DEVTOOLS_ANIMATIONINSPECTOR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_BROWSERCONSOLE_OPENED_BOOLEAN", + "DEVTOOLS_BROWSERCONSOLE_OPENED_PER_USER_FLAG", + "DEVTOOLS_BROWSERCONSOLE_TIME_ACTIVE_SECONDS", + "DEVTOOLS_CANVASDEBUGGER_OPENED_BOOLEAN", + "DEVTOOLS_CANVASDEBUGGER_OPENED_PER_USER_FLAG", + "DEVTOOLS_CANVASDEBUGGER_TIME_ACTIVE_SECONDS", + "DEVTOOLS_COMPUTEDVIEW_OPENED_BOOLEAN", + "DEVTOOLS_COMPUTEDVIEW_OPENED_PER_USER_FLAG", + "DEVTOOLS_COMPUTEDVIEW_TIME_ACTIVE_SECONDS", + "DEVTOOLS_CUSTOM_OPENED_BOOLEAN", + "DEVTOOLS_CUSTOM_OPENED_PER_USER_FLAG", + "DEVTOOLS_CUSTOM_TIME_ACTIVE_SECONDS", + "DEVTOOLS_DEBUGGER_DISPLAY_SOURCE_LOCAL_MS", + "DEVTOOLS_DEBUGGER_DISPLAY_SOURCE_REMOTE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_ADDONDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_ASSIGN_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_BINDINGS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_BLACKBOX_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_CLIENTEVALUATE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_DELETE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_DETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_DISPLAYSTRING_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_ENUMPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_EVENTLISTENERS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_FRAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_GET_EXECUTABLE_LINES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_INTERRUPT_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTADDONS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTPROCESSES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTSERVICEWORKERREGISTRATIONS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTTABS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTWORKERS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_NAVIGATETO_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_OWNPROPERTYNAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PARAMETERNAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROPERTY_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOCOLDESCRIPTION_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOTYPEANDPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOTYPESANDPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOTYPE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RECONFIGURETAB_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RECONFIGURETHREAD_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RELEASEMANY_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RELEASE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RELOAD_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RESUME_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_SCOPE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_SOURCES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_STARTTRACE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_STOPTRACE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_SUBSTRING_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_TABDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_THREADDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_THREADGRIPS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_TRACERDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_UNBLACKBOX_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_WORKERDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_ADDONDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_ASSIGN_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_BINDINGS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_BLACKBOX_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_CLIENTEVALUATE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_DELETE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_DETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_DISPLAYSTRING_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_ENUMPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_EVENTLISTENERS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_FRAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_GET_EXECUTABLE_LINES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_INTERRUPT_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTADDONS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTPROCESSES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTSERVICEWORKERREGISTRATIONS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTTABS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTWORKERS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_NAVIGATETO_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_OWNPROPERTYNAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PARAMETERNAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROPERTY_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOCOLDESCRIPTION_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOTYPEANDPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOTYPESANDPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOTYPE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RECONFIGURETAB_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RECONFIGURETHREAD_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RELEASEMANY_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RELEASE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RELOAD_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RESUME_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_SCOPE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_SOURCES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_STARTTRACE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_STOPTRACE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_SUBSTRING_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_TABDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_THREADDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_THREADGRIPS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_TRACERDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_UNBLACKBOX_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_WORKERDETACH_MS", + "DEVTOOLS_DEVELOPERTOOLBAR_OPENED_BOOLEAN", + "DEVTOOLS_DEVELOPERTOOLBAR_OPENED_PER_USER_FLAG", + "DEVTOOLS_DEVELOPERTOOLBAR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_EYEDROPPER_OPENED_BOOLEAN", + "DEVTOOLS_EYEDROPPER_OPENED_PER_USER_FLAG", + "DEVTOOLS_FONTINSPECTOR_OPENED_BOOLEAN", + "DEVTOOLS_FONTINSPECTOR_OPENED_PER_USER_FLAG", + "DEVTOOLS_FONTINSPECTOR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_HEAP_SNAPSHOT_EDGE_COUNT", + "DEVTOOLS_HEAP_SNAPSHOT_NODE_COUNT", + "DEVTOOLS_HUD_APP_MEMORY_CONTENTINTERACTIVE_V2", + "DEVTOOLS_HUD_APP_MEMORY_FULLYLOADED_V2", + "DEVTOOLS_HUD_APP_MEMORY_MEDIAENUMERATED_V2", + "DEVTOOLS_HUD_APP_MEMORY_NAVIGATIONINTERACTIVE_V2", + "DEVTOOLS_HUD_APP_MEMORY_NAVIGATIONLOADED_V2", + "DEVTOOLS_HUD_APP_MEMORY_SCANEND_V2", + "DEVTOOLS_HUD_APP_MEMORY_VISUALLYLOADED_V2", + "DEVTOOLS_HUD_APP_STARTUP_TIME_CONTENTINTERACTIVE", + "DEVTOOLS_HUD_APP_STARTUP_TIME_FULLYLOADED", + "DEVTOOLS_HUD_APP_STARTUP_TIME_MEDIAENUMERATED", + "DEVTOOLS_HUD_APP_STARTUP_TIME_NAVIGATIONINTERACTIVE", + "DEVTOOLS_HUD_APP_STARTUP_TIME_NAVIGATIONLOADED", + "DEVTOOLS_HUD_APP_STARTUP_TIME_SCANEND", + "DEVTOOLS_HUD_APP_STARTUP_TIME_VISUALLYLOADED", + "DEVTOOLS_HUD_ERRORS", + "DEVTOOLS_HUD_JANK", + "DEVTOOLS_HUD_REFLOWS", + "DEVTOOLS_HUD_REFLOW_DURATION", + "DEVTOOLS_HUD_SECURITY_CATEGORY", + "DEVTOOLS_HUD_USS", + "DEVTOOLS_HUD_WARNINGS", + "DEVTOOLS_INSPECTOR_OPENED_BOOLEAN", + "DEVTOOLS_INSPECTOR_OPENED_PER_USER_FLAG", + "DEVTOOLS_INSPECTOR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_JSBROWSERDEBUGGER_OPENED_BOOLEAN", + "DEVTOOLS_JSBROWSERDEBUGGER_OPENED_PER_USER_FLAG", + "DEVTOOLS_JSBROWSERDEBUGGER_TIME_ACTIVE_SECONDS", + "DEVTOOLS_JSDEBUGGER_OPENED_BOOLEAN", + "DEVTOOLS_JSDEBUGGER_OPENED_PER_USER_FLAG", + "DEVTOOLS_JSDEBUGGER_TIME_ACTIVE_SECONDS", + "DEVTOOLS_JSPROFILER_OPENED_BOOLEAN", + "DEVTOOLS_JSPROFILER_OPENED_PER_USER_FLAG", + "DEVTOOLS_JSPROFILER_TIME_ACTIVE_SECONDS", + "DEVTOOLS_LAYOUTVIEW_OPENED_BOOLEAN", + "DEVTOOLS_LAYOUTVIEW_OPENED_PER_USER_FLAG", + "DEVTOOLS_LAYOUTVIEW_TIME_ACTIVE_SECONDS", + "DEVTOOLS_MEMORY_OPENED_BOOLEAN", + "DEVTOOLS_MEMORY_OPENED_PER_USER_FLAG", + "DEVTOOLS_MEMORY_TIME_ACTIVE_SECONDS", + "DEVTOOLS_MENU_EYEDROPPER_OPENED_BOOLEAN", + "DEVTOOLS_MENU_EYEDROPPER_OPENED_PER_USER_FLAG", + "DEVTOOLS_NETMONITOR_OPENED_BOOLEAN", + "DEVTOOLS_NETMONITOR_OPENED_PER_USER_FLAG", + "DEVTOOLS_NETMONITOR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_OPTIONS_OPENED_BOOLEAN", + "DEVTOOLS_OPTIONS_OPENED_PER_USER_FLAG", + "DEVTOOLS_OPTIONS_TIME_ACTIVE_SECONDS", + "DEVTOOLS_OS_ENUMERATED_PER_USER", + "DEVTOOLS_OS_IS_64_BITS_PER_USER", + "DEVTOOLS_PAINTFLASHING_OPENED_BOOLEAN", + "DEVTOOLS_PAINTFLASHING_OPENED_PER_USER_FLAG", + "DEVTOOLS_PAINTFLASHING_TIME_ACTIVE_SECONDS", + "DEVTOOLS_PERFTOOLS_CONSOLE_RECORDING_COUNT", + "DEVTOOLS_PERFTOOLS_RECORDING_COUNT", + "DEVTOOLS_PERFTOOLS_RECORDING_DURATION_MS", + "DEVTOOLS_PERFTOOLS_RECORDING_EXPORT_FLAG", + "DEVTOOLS_PERFTOOLS_RECORDING_FEATURES_USED", + "DEVTOOLS_PERFTOOLS_RECORDING_IMPORT_FLAG", + "DEVTOOLS_PERFTOOLS_SELECTED_VIEW_MS", + "DEVTOOLS_PICKER_EYEDROPPER_OPENED_BOOLEAN", + "DEVTOOLS_PICKER_EYEDROPPER_OPENED_PER_USER_FLAG", + "DEVTOOLS_READ_HEAP_SNAPSHOT_MS", + "DEVTOOLS_RESPONSIVE_OPENED_BOOLEAN", + "DEVTOOLS_RESPONSIVE_OPENED_PER_USER_FLAG", + "DEVTOOLS_RESPONSIVE_TIME_ACTIVE_SECONDS", + "DEVTOOLS_RULEVIEW_OPENED_BOOLEAN", + "DEVTOOLS_RULEVIEW_OPENED_PER_USER_FLAG", + "DEVTOOLS_RULEVIEW_TIME_ACTIVE_SECONDS", + "DEVTOOLS_SAVE_HEAP_SNAPSHOT_MS", + "DEVTOOLS_SCRATCHPAD_OPENED_BOOLEAN", + "DEVTOOLS_SCRATCHPAD_OPENED_PER_USER_FLAG", + "DEVTOOLS_SCRATCHPAD_TIME_ACTIVE_SECONDS", + "DEVTOOLS_SCREEN_RESOLUTION_ENUMERATED_PER_USER", + "DEVTOOLS_SHADEREDITOR_OPENED_BOOLEAN", + "DEVTOOLS_SHADEREDITOR_OPENED_PER_USER_FLAG", + "DEVTOOLS_SHADEREDITOR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_STORAGE_OPENED_BOOLEAN", + "DEVTOOLS_STORAGE_OPENED_PER_USER_FLAG", + "DEVTOOLS_STORAGE_TIME_ACTIVE_SECONDS", + "DEVTOOLS_STYLEEDITOR_OPENED_BOOLEAN", + "DEVTOOLS_STYLEEDITOR_OPENED_PER_USER_FLAG", + "DEVTOOLS_STYLEEDITOR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_TABS_OPEN_AVERAGE_LINEAR", + "DEVTOOLS_TABS_OPEN_PEAK_LINEAR", + "DEVTOOLS_TABS_PINNED_AVERAGE_LINEAR", + "DEVTOOLS_TABS_PINNED_PEAK_LINEAR", + "DEVTOOLS_TILT_OPENED_BOOLEAN", + "DEVTOOLS_TILT_OPENED_PER_USER_FLAG", + "DEVTOOLS_TILT_TIME_ACTIVE_SECONDS", + "DEVTOOLS_TOOLBOX_OPENED_BOOLEAN", + "DEVTOOLS_TOOLBOX_OPENED_PER_USER_FLAG", + "DEVTOOLS_TOOLBOX_TIME_ACTIVE_SECONDS", + "DEVTOOLS_WEBAUDIOEDITOR_OPENED_BOOLEAN", + "DEVTOOLS_WEBAUDIOEDITOR_OPENED_PER_USER_FLAG", + "DEVTOOLS_WEBAUDIOEDITOR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_WEBCONSOLE_OPENED_BOOLEAN", + "DEVTOOLS_WEBCONSOLE_OPENED_PER_USER_FLAG", + "DEVTOOLS_WEBCONSOLE_TIME_ACTIVE_SECONDS", + "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_APP_TYPE", + "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_ID", + "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_OS", + "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_PLATFORM_VERSION", + "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_PROCESSOR", + "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_TYPE", + "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_VERSION", + "DEVTOOLS_WEBIDE_CONNECTION_DEBUG_USED", + "DEVTOOLS_WEBIDE_CONNECTION_PLAY_USED", + "DEVTOOLS_WEBIDE_CONNECTION_RESULT", + "DEVTOOLS_WEBIDE_CONNECTION_TIME_SECONDS", + "DEVTOOLS_WEBIDE_IMPORT_PROJECT_BOOLEAN", + "DEVTOOLS_WEBIDE_IMPORT_PROJECT_PER_USER_FLAG", + "DEVTOOLS_WEBIDE_LOCAL_CONNECTION_RESULT", + "DEVTOOLS_WEBIDE_NEW_PROJECT_BOOLEAN", + "DEVTOOLS_WEBIDE_NEW_PROJECT_PER_USER_FLAG", + "DEVTOOLS_WEBIDE_OPENED_BOOLEAN", + "DEVTOOLS_WEBIDE_OPENED_PER_USER_FLAG", + "DEVTOOLS_WEBIDE_OTHER_CONNECTION_RESULT", + "DEVTOOLS_WEBIDE_PROJECT_EDITOR_OPENED_BOOLEAN", + "DEVTOOLS_WEBIDE_PROJECT_EDITOR_OPENED_PER_USER_FLAG", + "DEVTOOLS_WEBIDE_PROJECT_EDITOR_SAVE_BOOLEAN", + "DEVTOOLS_WEBIDE_PROJECT_EDITOR_SAVE_PER_USER_FLAG", + "DEVTOOLS_WEBIDE_PROJECT_EDITOR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_WEBIDE_REMOTE_CONNECTION_RESULT", + "DEVTOOLS_WEBIDE_SIMULATOR_CONNECTION_RESULT", + "DEVTOOLS_WEBIDE_TIME_ACTIVE_SECONDS", + "DEVTOOLS_WEBIDE_USB_CONNECTION_RESULT", + "DEVTOOLS_WEBIDE_WIFI_CONNECTION_RESULT", + "DISK_CACHE_CORRUPT_DETAILS", + "DISK_CACHE_INVALIDATION_SUCCESS", + "DISK_CACHE_REDUCTION_TRIAL", + "DISK_CACHE_REVALIDATION_SAFE", + "DISK_CACHE_REVALIDATION_SUCCESS", + "DISK_CACHE_SMART_SIZE_USING_OLD_MAX", + "DISPLAY_SCALING_LINUX", + "DISPLAY_SCALING_MSWIN", + "DISPLAY_SCALING_OSX", + "DNS_BLACKLIST_COUNT", + "DNS_CLEANUP_AGE", + "DNS_FAILED_LOOKUP_TIME", + "DNS_LOOKUP_METHOD2", + "DNS_LOOKUP_TIME", + "DNS_RENEWAL_TIME", + "DNS_RENEWAL_TIME_FOR_TTL", + "DNT_USAGE", + "DOM_RANGE_DETACHED", + "DOM_TIMERS_FIRED_PER_NATIVE_TIMEOUT", + "DOM_TIMERS_RECENTLY_SET", + "DOM_WINDOW_SHOWMODALDIALOG_USED", + "DWRITEFONT_DELAYEDINITFONTLIST_COLLECT", + "DWRITEFONT_DELAYEDINITFONTLIST_COUNT", + "DWRITEFONT_DELAYEDINITFONTLIST_TOTAL", + "DWRITEFONT_INIT_PROBLEM", + "E10S_BLOCKED_FROM_RUNNING", + "E10S_STILL_ACCEPTED_FROM_PROMPT", + "E10S_WINDOW", + "EARLY_GLUESTARTUP_HARD_FAULTS", + "EARLY_GLUESTARTUP_READ_OPS", + "EARLY_GLUESTARTUP_READ_TRANSFER", + "ENABLE_PRIVILEGE_EVER_CALLED", + "FENNEC_DISTRIBUTION_CODE_CATEGORY", + "FENNEC_DISTRIBUTION_DOWNLOAD_TIME_MS", + "FENNEC_DISTRIBUTION_REFERRER_INVALID", + "FENNEC_GECKOAPP_STARTUP_ACTION", + "FENNEC_GLOBALHISTORY_ADD_MS", + "FENNEC_GLOBALHISTORY_UPDATE_MS", + "FENNEC_GLOBALHISTORY_VISITED_BUILD_MS", + "FENNEC_READER_VIEW_BUTTON", + "FENNEC_READING_LIST_COUNT", + "FENNEC_RESTORING_ACTIVITY", + "FENNEC_SEARCH_LOADER_TIME_MS", + "FENNEC_STARTUP_TIME_GECKOREADY", + "FENNEC_STARTUP_TIME_JAVAUI", + "FENNEC_SYNC11_MIGRATIONS_COMPLETED", + "FENNEC_SYNC11_MIGRATIONS_FAILED", + "FENNEC_SYNC11_MIGRATIONS_SUCCEEDED", + "FENNEC_SYNC11_MIGRATION_NOTIFICATIONS_OFFERED", + "FENNEC_SYNC11_MIGRATION_SENTINELS_SEEN", + "FENNEC_SYNC_NUMBER_OF_SYNCS_COMPLETED", + "FENNEC_SYNC_NUMBER_OF_SYNCS_FAILED", + "FENNEC_SYNC_NUMBER_OF_SYNCS_FAILED_BACKOFF", + "FENNEC_SYNC_NUMBER_OF_SYNCS_STARTED", + "FENNEC_TABQUEUE_ENABLED", + "FENNEC_TABQUEUE_PROMPT_ENABLE_NO", + "FENNEC_TABQUEUE_PROMPT_ENABLE_YES", + "FENNEC_TABQUEUE_QUEUESIZE", + "FENNEC_TOPSITES_LOADER_TIME_MS", + "FENNEC_WAS_KILLED", + "FETCH_IS_MAINTHREAD", + "FIND_PLUGINS", + "FLASH_PLUGIN_AREA", + "FLASH_PLUGIN_HEIGHT", + "FLASH_PLUGIN_INSTANCES_ON_PAGE", + "FLASH_PLUGIN_STATES", + "FLASH_PLUGIN_WIDTH", + "FONTLIST_INITFACENAMELISTS", + "FONTLIST_INITOTHERFAMILYNAMES", + "FONT_CACHE_HIT", + "FORCED_DEVICE_RESET_REASON", + "FORGET_SKIPPABLE_MAX", + "FX_BOOKMARKS_TOOLBAR_INIT_MS", + "FX_BROWSER_FULLSCREEN_USED", + "FX_GESTURE_COMPRESS_SNAPSHOT_OF_PAGE", + "FX_GESTURE_INSTALL_SNAPSHOT_OF_PAGE", + "FX_GESTURE_TAKE_SNAPSHOT_OF_PAGE", + "FX_IDENTITY_POPUP_OPEN_MS", + "FX_MIGRATION_ENTRY_POINT", + "FX_MIGRATION_ERRORS", + "FX_MIGRATION_HOMEPAGE_IMPORTED", + "FX_MIGRATION_SOURCE_BROWSER", + "FX_MIGRATION_USAGE", + "FX_NEW_WINDOW_MS", + "FX_PAGE_LOAD_MS", + "FX_SANITIZE_CACHE", + "FX_SANITIZE_COOKIES", + "FX_SANITIZE_COOKIES_2", + "FX_SANITIZE_DOWNLOADS", + "FX_SANITIZE_FORMDATA", + "FX_SANITIZE_HISTORY", + "FX_SANITIZE_OFFLINEAPPS", + "FX_SANITIZE_OPENWINDOWS", + "FX_SANITIZE_PLUGINS", + "FX_SANITIZE_SESSIONS", + "FX_SANITIZE_SITESETTINGS", + "FX_SANITIZE_TOTAL", + "FX_SESSION_RESTORE_ALL_FILES_CORRUPT", + "FX_SESSION_RESTORE_AUTO_RESTORE_DURATION_UNTIL_EAGER_TABS_RESTORED_MS", + "FX_SESSION_RESTORE_COLLECT_ALL_WINDOWS_DATA_MS", + "FX_SESSION_RESTORE_COLLECT_COOKIES_MS", + "FX_SESSION_RESTORE_COLLECT_DATA_LONGEST_OP_MS", + "FX_SESSION_RESTORE_COLLECT_DATA_MS", + "FX_SESSION_RESTORE_CONTENT_COLLECT_DATA_LONGEST_OP_MS", + "FX_SESSION_RESTORE_CORRUPT_FILE", + "FX_SESSION_RESTORE_DOM_STORAGE_SIZE_ESTIMATE_CHARS", + "FX_SESSION_RESTORE_FILE_SIZE_BYTES", + "FX_SESSION_RESTORE_MANUAL_RESTORE_DURATION_UNTIL_EAGER_TABS_RESTORED_MS", + "FX_SESSION_RESTORE_NUMBER_OF_EAGER_TABS_RESTORED", + "FX_SESSION_RESTORE_NUMBER_OF_TABS_RESTORED", + "FX_SESSION_RESTORE_NUMBER_OF_WINDOWS_RESTORED", + "FX_SESSION_RESTORE_READ_FILE_MS", + "FX_SESSION_RESTORE_RESTORE_WINDOW_MS", + "FX_SESSION_RESTORE_SEND_UPDATE_CAUSED_OOM", + "FX_SESSION_RESTORE_SERIALIZE_DATA_MS", + "FX_SESSION_RESTORE_STARTUP_INIT_SESSION_MS", + "FX_SESSION_RESTORE_STARTUP_ONLOAD_INITIAL_WINDOW_MS", + "FX_SESSION_RESTORE_WRITE_FILE_MS", + "FX_TABLETMODE_PAGE_LOAD", + "FX_TAB_ANIM_ANY_FRAME_INTERVAL_MS", + "FX_TAB_ANIM_ANY_FRAME_PAINT_MS", + "FX_TAB_ANIM_CLOSE_MS", + "FX_TAB_ANIM_OPEN_FRAME_INTERVAL_MS", + "FX_TAB_ANIM_OPEN_MS", + "FX_TAB_ANIM_OPEN_PREVIEW_FRAME_INTERVAL_MS", + "FX_TAB_CLICK_MS", + "FX_TAB_SWITCH_SPINNER_VISIBLE_MS", + "FX_TAB_SWITCH_TOTAL_E10S_MS", + "FX_TAB_SWITCH_TOTAL_MS", + "FX_TAB_SWITCH_UPDATE_MS", + "FX_THUMBNAILS_BG_CAPTURE_CANVAS_DRAW_TIME_MS", + "FX_THUMBNAILS_BG_CAPTURE_DONE_REASON_2", + "FX_THUMBNAILS_BG_CAPTURE_PAGE_LOAD_TIME_MS", + "FX_THUMBNAILS_BG_CAPTURE_QUEUE_TIME_MS", + "FX_THUMBNAILS_BG_CAPTURE_SERVICE_TIME_MS", + "FX_THUMBNAILS_BG_QUEUE_SIZE_ON_CAPTURE", + "FX_THUMBNAILS_CAPTURE_TIME_MS", + "FX_THUMBNAILS_HIT_OR_MISS", + "FX_THUMBNAILS_STORE_TIME_MS", + "FX_TOTAL_TOP_VISITS", + "FX_TOUCH_USED", + "GC_ANIMATION_MS", + "GC_BUDGET_MS", + "GC_COMPACT_MS", + "GC_INCREMENTAL_DISABLED", + "GC_IS_COMPARTMENTAL", + "GC_MARK_GRAY_MS", + "GC_MARK_MS", + "GC_MARK_ROOTS_MS", + "GC_MAX_PAUSE_MS", + "GC_MINOR_REASON", + "GC_MINOR_REASON_LONG", + "GC_MINOR_US", + "GC_MMU_50", + "GC_MS", + "GC_NON_INCREMENTAL", + "GC_REASON_2", + "GC_RESET", + "GC_SCC_SWEEP_MAX_PAUSE_MS", + "GC_SCC_SWEEP_TOTAL_MS", + "GC_SLICE_MS", + "GC_SLOW_PHASE", + "GC_SWEEP_MS", + "GDI_INITFONTLIST_TOTAL", + "GEOLOCATION_ACCURACY_EXPONENTIAL", + "GEOLOCATION_ERROR", + "GEOLOCATION_OSX_SOURCE_IS_MLS", + "GEOLOCATION_WIN8_SOURCE_IS_MLS", + "GFX_CONTENT_FAILED_TO_ACQUIRE_DEVICE", + "GFX_CRASH", + "GHOST_WINDOWS", + "GLUESTARTUP_HARD_FAULTS", + "GLUESTARTUP_READ_OPS", + "GLUESTARTUP_READ_TRANSFER", + "GRADIENT_DURATION", + "GRADIENT_RETENTION_TIME", + "GRAPHICS_DRIVER_STARTUP_TEST", + "GRAPHICS_SANITY_TEST", + "GRAPHICS_SANITY_TEST_OS_SNAPSHOT", + "GRAPHICS_SANITY_TEST_REASON", + "HISTORY_LASTVISITED_TREE_QUERY_TIME_MS", + "HTML_BACKGROUND_REFLOW_MS_2", + "HTML_FOREGROUND_REFLOW_MS_2", + "HTTPCONNMGR_TOTAL_SPECULATIVE_CONN", + "HTTPCONNMGR_UNUSED_SPECULATIVE_CONN", + "HTTPCONNMGR_USED_SPECULATIVE_CONN", + "HTTP_AUTH_DIALOG_STATS", + "HTTP_CACHE_DISPOSITION_2", + "HTTP_CACHE_DISPOSITION_2_V2", + "HTTP_CACHE_ENTRY_ALIVE_TIME", + "HTTP_CACHE_ENTRY_RELOAD_TIME", + "HTTP_CACHE_ENTRY_REUSE_COUNT", + "HTTP_CACHE_MISS_HALFLIFE_EXPERIMENT_2", + "HTTP_CONNECTION_ENTRY_CACHE_HIT_1", + "HTTP_CONTENT_ENCODING", + "HTTP_DISK_CACHE_DISPOSITION_2", + "HTTP_DISK_CACHE_OVERHEAD", + "HTTP_KBREAD_PER_CONN", + "HTTP_MEMORY_CACHE_DISPOSITION_2", + "HTTP_OFFLINE_CACHE_DISPOSITION_2", + "HTTP_OFFLINE_CACHE_DOCUMENT_LOAD", + "HTTP_PAGELOAD_IS_SSL", + "HTTP_PAGE_CACHE_READ_TIME", + "HTTP_PAGE_CACHE_READ_TIME_V2", + "HTTP_PAGE_COMPLETE_LOAD", + "HTTP_PAGE_COMPLETE_LOAD_CACHED", + "HTTP_PAGE_COMPLETE_LOAD_CACHED_V2", + "HTTP_PAGE_COMPLETE_LOAD_NET", + "HTTP_PAGE_COMPLETE_LOAD_NET_V2", + "HTTP_PAGE_COMPLETE_LOAD_V2", + "HTTP_PAGE_DNS_ISSUE_TIME", + "HTTP_PAGE_DNS_LOOKUP_TIME", + "HTTP_PAGE_FIRST_SENT_TO_LAST_RECEIVED", + "HTTP_PAGE_OPEN_TO_FIRST_FROM_CACHE", + "HTTP_PAGE_OPEN_TO_FIRST_FROM_CACHE_V2", + "HTTP_PAGE_OPEN_TO_FIRST_RECEIVED", + "HTTP_PAGE_OPEN_TO_FIRST_SENT", + "HTTP_PAGE_REVALIDATION", + "HTTP_PAGE_TCP_CONNECTION", + "HTTP_PROXY_TYPE", + "HTTP_REQUEST_PER_CONN", + "HTTP_REQUEST_PER_PAGE", + "HTTP_REQUEST_PER_PAGE_FROM_CACHE", + "HTTP_RESPONSE_VERSION", + "HTTP_SAW_QUIC_ALT_PROTOCOL", + "HTTP_SCHEME_UPGRADE", + "HTTP_SUBITEM_FIRST_BYTE_LATENCY_TIME", + "HTTP_SUBITEM_OPEN_LATENCY_TIME", + "HTTP_SUB_CACHE_READ_TIME", + "HTTP_SUB_CACHE_READ_TIME_V2", + "HTTP_SUB_COMPLETE_LOAD", + "HTTP_SUB_COMPLETE_LOAD_CACHED", + "HTTP_SUB_COMPLETE_LOAD_CACHED_V2", + "HTTP_SUB_COMPLETE_LOAD_NET", + "HTTP_SUB_COMPLETE_LOAD_NET_V2", + "HTTP_SUB_COMPLETE_LOAD_V2", + "HTTP_SUB_DNS_ISSUE_TIME", + "HTTP_SUB_DNS_LOOKUP_TIME", + "HTTP_SUB_FIRST_SENT_TO_LAST_RECEIVED", + "HTTP_SUB_OPEN_TO_FIRST_FROM_CACHE", + "HTTP_SUB_OPEN_TO_FIRST_FROM_CACHE_V2", + "HTTP_SUB_OPEN_TO_FIRST_RECEIVED", + "HTTP_SUB_OPEN_TO_FIRST_SENT", + "HTTP_SUB_REVALIDATION", + "HTTP_SUB_TCP_CONNECTION", + "HTTP_TRANSACTION_IS_SSL", + "HTTP_TRANSACTION_USE_ALTSVC", + "HTTP_TRANSACTION_USE_ALTSVC_OE", + "IDLE_NOTIFY_BACK_LISTENERS", + "IDLE_NOTIFY_BACK_MS", + "IDLE_NOTIFY_IDLE_LISTENERS", + "IDLE_NOTIFY_IDLE_MS", + "IMAGE_DECODE_CHUNKS", + "IMAGE_DECODE_COUNT", + "IMAGE_DECODE_LATENCY_US", + "IMAGE_DECODE_ON_DRAW_LATENCY", + "IMAGE_DECODE_SPEED_GIF", + "IMAGE_DECODE_SPEED_JPEG", + "IMAGE_DECODE_SPEED_PNG", + "IMAGE_DECODE_TIME", + "IMAGE_MAX_DECODE_COUNT", + "INNERWINDOWS_WITH_MUTATION_LISTENERS", + "IPC_SAME_PROCESS_MESSAGE_COPY_OOM_KB", + "IPC_TRANSACTION_CANCEL", + "IPV4_AND_IPV6_ADDRESS_CONNECTIVITY", + "JS_DEPRECATED_LANGUAGE_EXTENSIONS_IN_ADDONS", + "JS_DEPRECATED_LANGUAGE_EXTENSIONS_IN_CONTENT", + "JS_TELEMETRY_ADDON_EXCEPTIONS", + "KEYGEN_GENERATED_KEY_TYPE", + "LINK_ICON_SIZES_ATTR_DIMENSION", + "LINK_ICON_SIZES_ATTR_USAGE", + "LOCALDOMSTORAGE_CLEAR_BLOCKING_MS", + "LOCALDOMSTORAGE_GETALLKEYS_BLOCKING_MS", + "LOCALDOMSTORAGE_GETKEY_BLOCKING_MS", + "LOCALDOMSTORAGE_GETLENGTH_BLOCKING_MS", + "LOCALDOMSTORAGE_GETVALUE_BLOCKING_MS", + "LOCALDOMSTORAGE_INIT_DATABASE_MS", + "LOCALDOMSTORAGE_KEY_SIZE_BYTES", + "LOCALDOMSTORAGE_PRELOAD_PENDING_ON_FIRST_ACCESS", + "LOCALDOMSTORAGE_REMOVEKEY_BLOCKING_MS", + "LOCALDOMSTORAGE_SESSIONONLY_PRELOAD_BLOCKING_MS", + "LOCALDOMSTORAGE_SETVALUE_BLOCKING_MS", + "LOCALDOMSTORAGE_SHUTDOWN_DATABASE_MS", + "LOCALDOMSTORAGE_UNLOAD_BLOCKING_MS", + "LOCALDOMSTORAGE_VALUE_SIZE_BYTES", + "LONG_REFLOW_INTERRUPTIBLE", + "LOOP_AUDIO_QUALITY_INBOUND_BANDWIDTH_KBITS", + "LOOP_AUDIO_QUALITY_OUTBOUND_BANDWIDTH_KBITS", + "LOOP_AUDIO_QUALITY_OUTBOUND_RTT", + "LOOP_CALL_DURATION", + "LOOP_CALL_TYPE", + "LOOP_CLIENT_CALL_URL_REQUESTS_SUCCESS", + "LOOP_CLIENT_CALL_URL_SHARED", + "LOOP_DATACHANNEL_NEGOTIATED", + "LOOP_GET_USER_MEDIA_TYPE", + "LOOP_ICE_ADD_CANDIDATE_ERRORS_GIVEN_FAILURE", + "LOOP_ICE_ADD_CANDIDATE_ERRORS_GIVEN_SUCCESS", + "LOOP_ICE_FAILURE_TIME", + "LOOP_ICE_FINAL_CONNECTION_STATE", + "LOOP_ICE_LATE_TRICKLE_ARRIVAL_TIME", + "LOOP_ICE_ON_TIME_TRICKLE_ARRIVAL_TIME", + "LOOP_ICE_SUCCESS_RATE", + "LOOP_ICE_SUCCESS_TIME", + "LOOP_MAX_AUDIO_RECEIVE_TRACK", + "LOOP_MAX_AUDIO_SEND_TRACK", + "LOOP_MAX_VIDEO_RECEIVE_TRACK", + "LOOP_MAX_VIDEO_SEND_TRACK", + "LOOP_RENEGOTIATIONS", + "LOOP_ROOM_CREATE", + "LOOP_ROOM_DELETE", + "LOOP_ROOM_SESSION_WITHCHAT", + "LOOP_SHARING_ROOM_URL", + "LOOP_TWO_WAY_MEDIA_CONN_LENGTH_1", + "LOOP_VIDEO_DECODER_BITRATE_AVG_PER_CALL_KBPS", + "LOOP_VIDEO_DECODER_BITRATE_STD_DEV_PER_CALL_KBPS", + "LOOP_VIDEO_DECODER_DISCARDED_PACKETS_PER_CALL_PPM", + "LOOP_VIDEO_DECODER_FRAMERATE_10X_STD_DEV_PER_CALL", + "LOOP_VIDEO_DECODER_FRAMERATE_AVG_PER_CALL", + "LOOP_VIDEO_DECODE_ERROR_TIME_PERMILLE", + "LOOP_VIDEO_ENCODER_BITRATE_AVG_PER_CALL_KBPS", + "LOOP_VIDEO_ENCODER_BITRATE_STD_DEV_PER_CALL_KBPS", + "LOOP_VIDEO_ENCODER_DROPPED_FRAMES_PER_CALL_FPM", + "LOOP_VIDEO_ENCODER_FRAMERATE_10X_STD_DEV_PER_CALL", + "LOOP_VIDEO_ENCODER_FRAMERATE_AVG_PER_CALL", + "LOOP_VIDEO_ERROR_RECOVERY_MS", + "LOOP_VIDEO_QUALITY_INBOUND_BANDWIDTH_KBITS", + "LOOP_VIDEO_QUALITY_OUTBOUND_BANDWIDTH_KBITS", + "LOOP_VIDEO_QUALITY_OUTBOUND_RTT", + "LOOP_VIDEO_RECOVERY_AFTER_ERROR_PER_MIN", + "LOOP_VIDEO_RECOVERY_BEFORE_ERROR_PER_MIN", + "LOW_MEMORY_EVENTS_COMMIT_SPACE", + "LOW_MEMORY_EVENTS_PHYSICAL", + "LOW_MEMORY_EVENTS_VIRTUAL", + "MAC_INITFONTLIST_TOTAL", + "MASTER_PASSWORD_ENABLED", + "MEDIA_CODEC_USED", + "MEDIA_WMF_DECODE_ERROR", + "MEMORY_FREE_PURGED_PAGES_MS", + "MEMORY_HEAP_ALLOCATED", + "MEMORY_HEAP_COMMITTED_UNUSED", + "MEMORY_HEAP_COMMITTED_UNUSED_RATIO", + "MEMORY_IMAGES_CONTENT_USED_UNCOMPRESSED", + "MEMORY_JS_COMPARTMENTS_SYSTEM", + "MEMORY_JS_COMPARTMENTS_USER", + "MEMORY_JS_GC_HEAP", + "MEMORY_JS_MAIN_RUNTIME_TEMPORARY_PEAK", + "MEMORY_STORAGE_SQLITE", + "MEMORY_VSIZE", + "MEMORY_VSIZE_MAX_CONTIGUOUS", + "MIXED_CONTENT_HSTS", + "MIXED_CONTENT_PAGE_LOAD", + "MIXED_CONTENT_UNBLOCK_COUNTER", + "MOZ_SQLITE_COOKIES_OPEN_READAHEAD_MS", + "MOZ_SQLITE_COOKIES_READ_B", + "MOZ_SQLITE_COOKIES_READ_MAIN_THREAD_MS", + "MOZ_SQLITE_COOKIES_READ_MS", + "MOZ_SQLITE_COOKIES_SYNC_MAIN_THREAD_MS", + "MOZ_SQLITE_COOKIES_SYNC_MS", + "MOZ_SQLITE_COOKIES_WRITE_B", + "MOZ_SQLITE_COOKIES_WRITE_MAIN_THREAD_MS", + "MOZ_SQLITE_COOKIES_WRITE_MS", + "MOZ_SQLITE_OPEN_MAIN_THREAD_MS", + "MOZ_SQLITE_OPEN_MS", + "MOZ_SQLITE_OTHER_READ_B", + "MOZ_SQLITE_OTHER_READ_MAIN_THREAD_MS", + "MOZ_SQLITE_OTHER_READ_MS", + "MOZ_SQLITE_OTHER_SYNC_MAIN_THREAD_MS", + "MOZ_SQLITE_OTHER_SYNC_MS", + "MOZ_SQLITE_OTHER_WRITE_B", + "MOZ_SQLITE_OTHER_WRITE_MAIN_THREAD_MS", + "MOZ_SQLITE_OTHER_WRITE_MS", + "MOZ_SQLITE_PLACES_READ_B", + "MOZ_SQLITE_PLACES_READ_MAIN_THREAD_MS", + "MOZ_SQLITE_PLACES_READ_MS", + "MOZ_SQLITE_PLACES_SYNC_MAIN_THREAD_MS", + "MOZ_SQLITE_PLACES_SYNC_MS", + "MOZ_SQLITE_PLACES_WRITE_B", + "MOZ_SQLITE_PLACES_WRITE_MAIN_THREAD_MS", + "MOZ_SQLITE_PLACES_WRITE_MS", + "MOZ_SQLITE_TRUNCATE_MAIN_THREAD_MS", + "MOZ_SQLITE_TRUNCATE_MS", + "MOZ_SQLITE_WEBAPPS_READ_B", + "MOZ_SQLITE_WEBAPPS_READ_MAIN_THREAD_MS", + "MOZ_SQLITE_WEBAPPS_READ_MS", + "MOZ_SQLITE_WEBAPPS_SYNC_MAIN_THREAD_MS", + "MOZ_SQLITE_WEBAPPS_SYNC_MS", + "MOZ_SQLITE_WEBAPPS_WRITE_B", + "MOZ_SQLITE_WEBAPPS_WRITE_MAIN_THREAD_MS", + "MOZ_SQLITE_WEBAPPS_WRITE_MS", + "MOZ_STORAGE_ASYNC_REQUESTS_MS", + "MOZ_STORAGE_ASYNC_REQUESTS_SUCCESS", + "NETWORK_AUTODIAL", + "NETWORK_CACHE_FS_TYPE", + "NETWORK_CACHE_HASH_STATS", + "NETWORK_CACHE_HIT_MISS_STAT_PER_CACHE_SIZE", + "NETWORK_CACHE_HIT_RATE_PER_CACHE_SIZE", + "NETWORK_CACHE_METADATA_FIRST_READ_SIZE", + "NETWORK_CACHE_METADATA_FIRST_READ_TIME_MS", + "NETWORK_CACHE_METADATA_SECOND_READ_TIME_MS", + "NETWORK_CACHE_METADATA_SIZE", + "NETWORK_CACHE_SIZE_FULL_FAT", + "NETWORK_CACHE_V1_HIT_TIME_MS", + "NETWORK_CACHE_V1_MISS_TIME_MS", + "NETWORK_CACHE_V1_TRUNCATE_TIME_MS", + "NETWORK_CACHE_V2_HIT_TIME_MS", + "NETWORK_CACHE_V2_INPUT_STREAM_STATUS", + "NETWORK_CACHE_V2_MISS_TIME_MS", + "NETWORK_CACHE_V2_OUTPUT_STREAM_STATUS", + "NETWORK_DISK_CACHE2_SHUTDOWN_CLEAR_PRIVATE", + "NETWORK_DISK_CACHE_DELETEDIR", + "NETWORK_DISK_CACHE_DELETEDIR_SHUTDOWN", + "NETWORK_DISK_CACHE_OPEN", + "NETWORK_DISK_CACHE_REVALIDATION", + "NETWORK_DISK_CACHE_SHUTDOWN", + "NETWORK_DISK_CACHE_SHUTDOWN_CLEAR_PRIVATE", + "NETWORK_DISK_CACHE_SHUTDOWN_V2", + "NETWORK_DISK_CACHE_STREAMIO_CLOSE", + "NETWORK_DISK_CACHE_STREAMIO_CLOSE_MAIN_THREAD", + "NETWORK_DISK_CACHE_TRASHRENAME", + "NEWTAB_PAGE_BLOCKED_SITES_COUNT", + "NEWTAB_PAGE_ENABLED", + "NEWTAB_PAGE_ENHANCED", + "NEWTAB_PAGE_LIFE_SPAN", + "NEWTAB_PAGE_LIFE_SPAN_SUGGESTED", + "NEWTAB_PAGE_PINNED_SITES_COUNT", + "NEWTAB_PAGE_SHOWN", + "NEWTAB_PAGE_SITE_CLICKED", + "NTLM_MODULE_USED_2", + "ONBEFOREUNLOAD_PROMPT_ACTION", + "ONBEFOREUNLOAD_PROMPT_COUNT", + "OSFILE_WORKER_LAUNCH_MS", + "OSFILE_WORKER_READY_MS", + "OSFILE_WRITEATOMIC_JANK_MS", + "PAGE_FAULTS_HARD", + "PAINT_BUILD_DISPLAYLIST_TIME", + "PAINT_RASTERIZE_TIME", + "PDF_VIEWER_DOCUMENT_GENERATOR", + "PDF_VIEWER_DOCUMENT_SIZE_KB", + "PDF_VIEWER_DOCUMENT_VERSION", + "PDF_VIEWER_EMBED", + "PDF_VIEWER_FALLBACK_SHOWN", + "PDF_VIEWER_FONT_TYPES", + "PDF_VIEWER_FORM", + "PDF_VIEWER_PRINT", + "PDF_VIEWER_STREAM_TYPES", + "PDF_VIEWER_TIME_TO_VIEW_MS", + "PDF_VIEWER_USED", + "PERF_MONITORING_SLOW_ADDON_CPOW_US", + "PERF_MONITORING_SLOW_ADDON_JANK_US", + "PERF_MONITORING_TEST_CPU_RESCHEDULING_PROPORTION_MOVED", + "PERMISSIONS_MIGRATION_7_ERROR", + "PERMISSIONS_REMIGRATION_COMPARISON", + "PERMISSIONS_SQL_CORRUPTED", + "PLACES_ANNOS_BOOKMARKS_COUNT", + "PLACES_ANNOS_PAGES_COUNT", + "PLACES_AUTOCOMPLETE_1ST_RESULT_TIME_MS", + "PLACES_AUTOCOMPLETE_6_FIRST_RESULTS_TIME_MS", + "PLACES_AUTOCOMPLETE_URLINLINE_DOMAIN_QUERY_TIME_MS", + "PLACES_BACKUPS_BOOKMARKSTREE_MS", + "PLACES_BACKUPS_DAYSFROMLAST", + "PLACES_BACKUPS_TOJSON_MS", + "PLACES_BOOKMARKS_COUNT", + "PLACES_DATABASE_FILESIZE_MB", + "PLACES_DATABASE_PAGESIZE_B", + "PLACES_DATABASE_SIZE_PER_PAGE_B", + "PLACES_EXPIRATION_STEPS_TO_CLEAN2", + "PLACES_EXPORT_TOHTML_MS", + "PLACES_FAVICON_BMP_SIZES", + "PLACES_FAVICON_GIF_SIZES", + "PLACES_FAVICON_ICO_SIZES", + "PLACES_FAVICON_JPEG_SIZES", + "PLACES_FAVICON_OTHER_SIZES", + "PLACES_FAVICON_PNG_SIZES", + "PLACES_FAVICON_SVG_SIZES", + "PLACES_HISTORY_LIBRARY_SEARCH_TIME_MS", + "PLACES_IDLE_FRECENCY_DECAY_TIME_MS", + "PLACES_IDLE_MAINTENANCE_TIME_MS", + "PLACES_KEYWORDS_COUNT", + "PLACES_MAINTENANCE_DAYSFROMLAST", + "PLACES_MOST_RECENT_EXPIRED_VISIT_DAYS", + "PLACES_PAGES_COUNT", + "PLACES_SORTED_BOOKMARKS_PERC", + "PLACES_TAGGED_BOOKMARKS_PERC", + "PLACES_TAGS_COUNT", + "PLUGINS_INFOBAR_ALLOW", + "PLUGINS_INFOBAR_BLOCK", + "PLUGINS_INFOBAR_SHOWN", + "PLUGINS_NOTIFICATION_PLUGIN_COUNT", + "PLUGINS_NOTIFICATION_SHOWN", + "PLUGINS_NOTIFICATION_USER_ACTION", + "PLUGIN_ACTIVATION_COUNT", + "PLUGIN_CALLED_DIRECTLY", + "PLUGIN_HANG_NOTICE_COUNT", + "PLUGIN_HANG_TIME", + "PLUGIN_HANG_UI_DONT_ASK", + "PLUGIN_HANG_UI_RESPONSE_TIME", + "PLUGIN_HANG_UI_USER_RESPONSE", + "PLUGIN_LOAD_METADATA", + "PLUGIN_SHUTDOWN_MS", + "PLUGIN_STARTUP_MS", + "POPUP_NOTIFICATION_DISMISSAL_MS", + "POPUP_NOTIFICATION_MAIN_ACTION_MS", + "POPUP_NOTIFICATION_STATS", + "PRCLOSE_TCP_BLOCKING_TIME_CONNECTIVITY_CHANGE", + "PRCLOSE_TCP_BLOCKING_TIME_LINK_CHANGE", + "PRCLOSE_TCP_BLOCKING_TIME_NORMAL", + "PRCLOSE_TCP_BLOCKING_TIME_OFFLINE", + "PRCLOSE_TCP_BLOCKING_TIME_SHUTDOWN", + "PRCLOSE_UDP_BLOCKING_TIME_CONNECTIVITY_CHANGE", + "PRCLOSE_UDP_BLOCKING_TIME_LINK_CHANGE", + "PRCLOSE_UDP_BLOCKING_TIME_NORMAL", + "PRCLOSE_UDP_BLOCKING_TIME_OFFLINE", + "PRCLOSE_UDP_BLOCKING_TIME_SHUTDOWN", + "PRCONNECTCONTINUE_BLOCKING_TIME_CONNECTIVITY_CHANGE", + "PRCONNECTCONTINUE_BLOCKING_TIME_LINK_CHANGE", + "PRCONNECTCONTINUE_BLOCKING_TIME_NORMAL", + "PRCONNECTCONTINUE_BLOCKING_TIME_OFFLINE", + "PRCONNECTCONTINUE_BLOCKING_TIME_SHUTDOWN", + "PRCONNECT_BLOCKING_TIME_CONNECTIVITY_CHANGE", + "PRCONNECT_BLOCKING_TIME_LINK_CHANGE", + "PRCONNECT_BLOCKING_TIME_NORMAL", + "PRCONNECT_BLOCKING_TIME_OFFLINE", + "PRCONNECT_BLOCKING_TIME_SHUTDOWN", + "PREDICTOR_BASE_CONFIDENCE", + "PREDICTOR_CONFIDENCE", + "PREDICTOR_GLOBAL_DEGRADATION", + "PREDICTOR_LEARN_ATTEMPTS", + "PREDICTOR_LEARN_FULL_QUEUE", + "PREDICTOR_LEARN_WORK_TIME", + "PREDICTOR_PREDICTIONS_CALCULATED", + "PREDICTOR_PREDICT_ATTEMPTS", + "PREDICTOR_PREDICT_FULL_QUEUE", + "PREDICTOR_PREDICT_TIME_TO_ACTION", + "PREDICTOR_PREDICT_TIME_TO_INACTION", + "PREDICTOR_PREDICT_WORK_TIME", + "PREDICTOR_SUBRESOURCE_DEGRADATION", + "PREDICTOR_TOTAL_PRECONNECTS", + "PREDICTOR_TOTAL_PRECONNECTS_CREATED", + "PREDICTOR_TOTAL_PRECONNECTS_UNUSED", + "PREDICTOR_TOTAL_PRECONNECTS_USED", + "PREDICTOR_TOTAL_PREDICTIONS", + "PREDICTOR_TOTAL_PRERESOLVES", + "PREDICTOR_WAIT_TIME", + "PROCESS_CRASH_SUBMIT_ATTEMPT", + "PROCESS_CRASH_SUBMIT_SUCCESS", + "PUSH_API_NOTIFICATION_RECEIVED", + "PUSH_API_NOTIFICATION_RECEIVED_BUT_DID_NOT_NOTIFY", + "PUSH_API_NOTIFY", + "PUSH_API_NOTIFY_REGISTRATION_LOST", + "PUSH_API_PERMISSION_DENIED", + "PUSH_API_PERMISSION_GRANTED", + "PUSH_API_PERMISSION_REQUESTED", + "PUSH_API_QUOTA_EXPIRATION_TIME", + "PUSH_API_QUOTA_RESET_TO", + "PUSH_API_SUBSCRIBE_ATTEMPT", + "PUSH_API_SUBSCRIBE_FAILED", + "PUSH_API_SUBSCRIBE_HTTP2_TIME", + "PUSH_API_SUBSCRIBE_SUCCEEDED", + "PUSH_API_SUBSCRIBE_WS_TIME", + "PUSH_API_UNSUBSCRIBE_ATTEMPT", + "PUSH_API_UNSUBSCRIBE_FAILED", + "PUSH_API_UNSUBSCRIBE_SUCCEEDED", + "PUSH_API_USED", + "PWMGR_BLOCKLIST_NUM_SITES", + "PWMGR_FORM_ACTION_EFFECT", + "PWMGR_FORM_AUTOFILL_RESULT", + "PWMGR_LOGIN_LAST_USED_DAYS", + "PWMGR_LOGIN_PAGE_SAFETY", + "PWMGR_MANAGE_COPIED_PASSWORD", + "PWMGR_MANAGE_COPIED_USERNAME", + "PWMGR_MANAGE_DELETED", + "PWMGR_MANAGE_DELETED_ALL", + "PWMGR_MANAGE_OPENED", + "PWMGR_MANAGE_SORTED", + "PWMGR_MANAGE_VISIBILITY_TOGGLED", + "PWMGR_NUM_HTTPAUTH_PASSWORDS", + "PWMGR_NUM_PASSWORDS_PER_HOSTNAME", + "PWMGR_NUM_SAVED_PASSWORDS", + "PWMGR_PASSWORD_INPUT_IN_FORM", + "PWMGR_PROMPT_REMEMBER_ACTION", + "PWMGR_PROMPT_UPDATE_ACTION", + "PWMGR_SAVING_ENABLED", + "PWMGR_USERNAME_PRESENT", + "RANGE_CHECKSUM_ERRORS", + "READER_MODE_DOWNLOAD_MS", + "READER_MODE_DOWNLOAD_RESULT", + "READER_MODE_PARSE_RESULT", + "READER_MODE_SERIALIZE_DOM_MS", + "READER_MODE_WORKER_PARSE_MS", + "REFRESH_DRIVER_TICK", + "REQUESTS_OF_ORIGINAL_CONTENT", + "SAFE_MODE_USAGE", + "SEARCH_COUNTS", + "SEARCH_SERVICE_BUILD_CACHE_MS", + "SEARCH_SERVICE_COUNTRY_FETCH_CAUSED_SYNC_INIT", + "SEARCH_SERVICE_COUNTRY_FETCH_RESULT", + "SEARCH_SERVICE_COUNTRY_FETCH_TIME_MS", + "SEARCH_SERVICE_COUNTRY_TIMEOUT", + "SEARCH_SERVICE_INIT_MS", + "SEARCH_SERVICE_INIT_SYNC", + "SEARCH_SERVICE_NONUS_COUNTRY_MISMATCHED_PLATFORM_OSX", + "SEARCH_SERVICE_NONUS_COUNTRY_MISMATCHED_PLATFORM_WIN", + "SEARCH_SERVICE_US_COUNTRY_MISMATCHED_PLATFORM_OSX", + "SEARCH_SERVICE_US_COUNTRY_MISMATCHED_PLATFORM_WIN", + "SEARCH_SERVICE_US_COUNTRY_MISMATCHED_TIMEZONE", + "SEARCH_SERVICE_US_TIMEZONE_MISMATCHED_COUNTRY", + "SECURITY_UI", + "SERVICE_WORKER_CONTROLLED_DOCUMENTS", + "SERVICE_WORKER_LIFE_TIME", + "SERVICE_WORKER_REGISTRATIONS", + "SERVICE_WORKER_REGISTRATION_LOADING", + "SERVICE_WORKER_REQUEST_PASSTHROUGH", + "SERVICE_WORKER_SPAWN_ATTEMPTS", + "SERVICE_WORKER_SPAWN_GETS_QUEUED", + "SERVICE_WORKER_UPDATED", + "SERVICE_WORKER_WAS_SPAWNED", + "SESSIONDOMSTORAGE_KEY_SIZE_BYTES", + "SESSIONDOMSTORAGE_VALUE_SIZE_BYTES", + "SHARED_WORKER_SPAWN_GETS_QUEUED", + "SHOULD_AUTO_DETECT_LANGUAGE", + "SHOULD_TRANSLATION_UI_APPEAR", + "SHUMWAY_ERROR", + "SHUMWAY_FALLBACK", + "SHUMWAY_FEATURE_USED", + "SHUMWAY_LOAD_RESOURCE_RESULT", + "SHUMWAY_PARSING_MS", + "SHUMWAY_SWF_AREA", + "SHUMWAY_SWF_AVM2", + "SHUMWAY_SWF_BANNER", + "SHUMWAY_SWF_FRAME_RATE", + "SHUMWAY_SWF_INDEX_ON_PAGE", + "SHUMWAY_SWF_SIZE_KB", + "SHUMWAY_SWF_VERSION", + "SHUMWAY_TIME_TO_VIEW_MS", + "SHUTDOWN_OK", + "SHUTDOWN_PHASE_DURATION_TICKS_PROFILE_BEFORE_CHANGE", + "SHUTDOWN_PHASE_DURATION_TICKS_PROFILE_CHANGE_TEARDOWN", + "SHUTDOWN_PHASE_DURATION_TICKS_QUIT_APPLICATION", + "SHUTDOWN_PHASE_DURATION_TICKS_XPCOM_WILL_SHUTDOWN", + "SLOW_ADDON_WARNING_RESPONSE_TIME", + "SLOW_ADDON_WARNING_STATES", + "SLOW_SCRIPT_NOTICE_COUNT", + "SOCIAL_ENABLED_ON_SESSION", + "SOCIAL_PANEL_CLICKS", + "SOCIAL_SIDEBAR_OPEN_DURATION", + "SOCIAL_SIDEBAR_STATE", + "SOCIAL_TOOLBAR_BUTTONS", + "SPDY_CHUNK_RECVD", + "SPDY_GOAWAY_LOCAL", + "SPDY_GOAWAY_PEER", + "SPDY_KBREAD_PER_CONN", + "SPDY_NPN_CONNECT", + "SPDY_NPN_JOIN", + "SPDY_PARALLEL_STREAMS", + "SPDY_REQUEST_PER_CONN", + "SPDY_SERVER_INITIATED_STREAMS", + "SPDY_SETTINGS_CWND", + "SPDY_SETTINGS_DL_BW", + "SPDY_SETTINGS_IW", + "SPDY_SETTINGS_MAX_STREAMS", + "SPDY_SETTINGS_RETRANS", + "SPDY_SETTINGS_RTT", + "SPDY_SETTINGS_UL_BW", + "SPDY_SYN_RATIO", + "SPDY_SYN_REPLY_RATIO", + "SPDY_SYN_REPLY_SIZE", + "SPDY_SYN_SIZE", + "SPDY_VERSION2", + "SQLITEBRIDGE_PROVIDER_FORMS_LOCKED", + "SQLITEBRIDGE_PROVIDER_HOME_LOCKED", + "SQLITEBRIDGE_PROVIDER_PASSWORDS_LOCKED", + "SSL_AUTH_ALGORITHM_FULL", + "SSL_AUTH_DSA_KEY_SIZE_FULL", + "SSL_AUTH_ECDSA_CURVE_FULL", + "SSL_AUTH_RSA_KEY_SIZE_FULL", + "SSL_BYTES_BEFORE_CERT_CALLBACK", + "SSL_CERT_ERROR_OVERRIDES", + "SSL_CERT_VERIFICATION_ERRORS", + "SSL_CIPHER_SUITE_FULL", + "SSL_CIPHER_SUITE_RESUMED", + "SSL_FALLBACK_LIMIT_REACHED", + "SSL_HANDSHAKE_TYPE", + "SSL_HANDSHAKE_VERSION", + "SSL_INITIAL_FAILED_CERT_VALIDATION_TIME_MOZILLAPKIX", + "SSL_KEA_DHE_KEY_SIZE_FULL", + "SSL_KEA_ECDHE_CURVE_FULL", + "SSL_KEA_RSA_KEY_SIZE_FULL", + "SSL_KEY_EXCHANGE_ALGORITHM_FULL", + "SSL_KEY_EXCHANGE_ALGORITHM_RESUMED", + "SSL_NPN_TYPE", + "SSL_OBSERVED_END_ENTITY_CERTIFICATE_LIFETIME", + "SSL_OCSP_MAY_FETCH", + "SSL_OCSP_STAPLING", + "SSL_PERMANENT_CERT_ERROR_OVERRIDES", + "SSL_REASONS_FOR_NOT_FALSE_STARTING", + "SSL_RESUMED_SESSION", + "SSL_SERVER_AUTH_EKU", + "SSL_SUCCESFUL_CERT_VALIDATION_TIME_MOZILLAPKIX", + "SSL_SYMMETRIC_CIPHER_FULL", + "SSL_SYMMETRIC_CIPHER_RESUMED", + "SSL_TIME_UNTIL_HANDSHAKE_FINISHED", + "SSL_TIME_UNTIL_READY", + "SSL_TLS10_INTOLERANCE_REASON_POST", + "SSL_TLS10_INTOLERANCE_REASON_PRE", + "SSL_TLS11_INTOLERANCE_REASON_POST", + "SSL_TLS11_INTOLERANCE_REASON_PRE", + "SSL_TLS12_INTOLERANCE_REASON_POST", + "SSL_TLS12_INTOLERANCE_REASON_PRE", + "SSL_VERSION_FALLBACK_INAPPROPRIATE", + "SSL_WEAK_CIPHERS_FALLBACK", + "STARTUP_CACHE_AGE_HOURS", + "STARTUP_CACHE_INVALID", + "STARTUP_CRASH_DETECTED", + "STARTUP_MEASUREMENT_ERRORS", + "STS_NUMBER_OF_ONSOCKETREADY_CALLS", + "STS_NUMBER_OF_PENDING_EVENTS", + "STS_NUMBER_OF_PENDING_EVENTS_IN_THE_LAST_CYCLE", + "STS_POLL_AND_EVENTS_CYCLE", + "STS_POLL_AND_EVENT_THE_LAST_CYCLE", + "STS_POLL_BLOCK_TIME", + "STS_POLL_CYCLE", + "STUMBLER_OBSERVATIONS_PER_DAY", + "STUMBLER_TIME_BETWEEN_RECEIVED_LOCATIONS_SEC", + "STUMBLER_TIME_BETWEEN_START_SEC", + "STUMBLER_TIME_BETWEEN_UPLOADS_SEC", + "STUMBLER_UPLOAD_BYTES", + "STUMBLER_UPLOAD_CELL_COUNT", + "STUMBLER_UPLOAD_OBSERVATION_COUNT", + "STUMBLER_UPLOAD_WIFI_AP_COUNT", + "STUMBLER_VOLUME_BYTES_UPLOADED_PER_SEC", + "SUBJECT_PRINCIPAL_ACCESSED_WITHOUT_SCRIPT_ON_STACK", + "SUBPROCESS_ABNORMAL_ABORT", + "SUBPROCESS_CRASHES_WITH_DUMP", + "SYSTEM_FONT_FALLBACK", + "SYSTEM_FONT_FALLBACK_FIRST", + "SYSTEM_FONT_FALLBACK_SCRIPT", + "TELEMETRY_COMPRESS", + "TELEMETRY_DISCARDED_ARCHIVED_PINGS_SIZE_MB", + "TELEMETRY_DISCARDED_CONTENT_PINGS_COUNT", + "TELEMETRY_DISCARDED_PENDING_PINGS_SIZE_MB", + "TELEMETRY_DISCARDED_SEND_PINGS_SIZE_MB", + "TELEMETRY_INVALID_PING_TYPE_SUBMITTED", + "TELEMETRY_MEMORY_REPORTER_MS", + "TELEMETRY_PENDING_CHECKING_OVER_QUOTA_MS", + "TELEMETRY_PENDING_EVICTING_OVER_QUOTA_MS", + "TELEMETRY_PENDING_LOAD_FAILURE_PARSE", + "TELEMETRY_PENDING_LOAD_FAILURE_READ", + "TELEMETRY_PENDING_PINGS_AGE", + "TELEMETRY_PENDING_PINGS_EVICTED_OVER_QUOTA", + "TELEMETRY_PENDING_PINGS_SIZE_MB", + "TELEMETRY_PING", + "TELEMETRY_PING_EVICTED_FOR_SERVER_ERRORS", + "TELEMETRY_PING_SIZE_EXCEEDED_ARCHIVED", + "TELEMETRY_PING_SIZE_EXCEEDED_PENDING", + "TELEMETRY_PING_SIZE_EXCEEDED_SEND", + "TELEMETRY_SEND", + "TELEMETRY_SESSIONDATA_FAILED_LOAD", + "TELEMETRY_SESSIONDATA_FAILED_PARSE", + "TELEMETRY_SESSIONDATA_FAILED_SAVE", + "TELEMETRY_SESSIONDATA_FAILED_VALIDATION", + "TELEMETRY_STRINGIFY", + "TELEMETRY_SUCCESS", + "TELEMETRY_TEST_COUNT", + "TELEMETRY_TEST_COUNT_INIT_NO_RECORD", + "TELEMETRY_TEST_EXPIRED", + "TELEMETRY_TEST_FLAG", + "TELEMETRY_TEST_KEYED_COUNT", + "TELEMETRY_TEST_KEYED_COUNT_INIT_NO_RECORD", + "TELEMETRY_TEST_KEYED_FLAG", + "TELEMETRY_TEST_KEYED_RELEASE_OPTIN", + "TELEMETRY_TEST_KEYED_RELEASE_OPTOUT", + "TELEMETRY_TEST_RELEASE_OPTIN", + "TELEMETRY_TEST_RELEASE_OPTOUT", + "THUNDERBIRD_CONVERSATIONS_TIME_TO_2ND_GLODA_QUERY_MS", + "THUNDERBIRD_GLODA_SIZE_MB", + "THUNDERBIRD_INDEXING_RATE_MSG_PER_S", + "TLS_ERROR_REPORT_UI", + "TOP_LEVEL_CONTENT_DOCUMENTS_DESTROYED", + "TOTAL_CONTENT_PAGE_LOAD_TIME", + "TOTAL_COUNT_HIGH_ERRORS", + "TOTAL_COUNT_LOW_ERRORS", + "TOUCH_ENABLED_DEVICE", + "TRACKING_PROTECTION_ENABLED", + "TRACKING_PROTECTION_EVENTS", + "TRACKING_PROTECTION_PBM_DISABLED", + "TRACKING_PROTECTION_SHIELD", + "TRANSACTION_WAIT_TIME_HTTP", + "TRANSACTION_WAIT_TIME_HTTP_PIPELINES", + "TRANSACTION_WAIT_TIME_SPDY", + "TRANSLATED_CHARACTERS", + "TRANSLATED_PAGES", + "TRANSLATED_PAGES_BY_LANGUAGE", + "TRANSLATION_OPPORTUNITIES", + "TRANSLATION_OPPORTUNITIES_BY_LANGUAGE", + "UPDATE_CANNOT_STAGE_EXTERNAL", + "UPDATE_CANNOT_STAGE_NOTIFY", + "UPDATE_CHECK_CODE_EXTERNAL", + "UPDATE_CHECK_CODE_NOTIFY", + "UPDATE_CHECK_EXTENDED_ERROR_EXTERNAL", + "UPDATE_CHECK_EXTENDED_ERROR_NOTIFY", + "UPDATE_CHECK_NO_UPDATE_EXTERNAL", + "UPDATE_CHECK_NO_UPDATE_NOTIFY", + "UPDATE_DOWNLOAD_CODE_COMPLETE", + "UPDATE_DOWNLOAD_CODE_PARTIAL", + "UPDATE_HAS_PREF_URL_OVERRIDE_EXTERNAL", + "UPDATE_HAS_PREF_URL_OVERRIDE_NOTIFY", + "UPDATE_INVALID_LASTUPDATETIME_EXTERNAL", + "UPDATE_INVALID_LASTUPDATETIME_NOTIFY", + "UPDATE_LAST_NOTIFY_INTERVAL_DAYS_EXTERNAL", + "UPDATE_LAST_NOTIFY_INTERVAL_DAYS_NOTIFY", + "UPDATE_NOT_PREF_UPDATE_AUTO_EXTERNAL", + "UPDATE_NOT_PREF_UPDATE_AUTO_NOTIFY", + "UPDATE_NOT_PREF_UPDATE_ENABLED_EXTERNAL", + "UPDATE_NOT_PREF_UPDATE_ENABLED_NOTIFY", + "UPDATE_NOT_PREF_UPDATE_SERVICE_ENABLED_EXTERNAL", + "UPDATE_NOT_PREF_UPDATE_SERVICE_ENABLED_NOTIFY", + "UPDATE_NOT_PREF_UPDATE_STAGING_ENABLED_EXTERNAL", + "UPDATE_NOT_PREF_UPDATE_STAGING_ENABLED_NOTIFY", + "UPDATE_PING_COUNT_EXTERNAL", + "UPDATE_PING_COUNT_NOTIFY", + "UPDATE_PREF_SERVICE_ERRORS_EXTERNAL", + "UPDATE_PREF_SERVICE_ERRORS_NOTIFY", + "UPDATE_PREF_UPDATE_CANCELATIONS_EXTERNAL", + "UPDATE_PREF_UPDATE_CANCELATIONS_NOTIFY", + "UPDATE_SERVICE_INSTALLED_EXTERNAL", + "UPDATE_SERVICE_INSTALLED_NOTIFY", + "UPDATE_SERVICE_MANUALLY_UNINSTALLED_EXTERNAL", + "UPDATE_SERVICE_MANUALLY_UNINSTALLED_NOTIFY", + "UPDATE_STATE_CODE_COMPLETE_STAGE", + "UPDATE_STATE_CODE_COMPLETE_STARTUP", + "UPDATE_STATE_CODE_PARTIAL_STAGE", + "UPDATE_STATE_CODE_PARTIAL_STARTUP", + "UPDATE_STATE_CODE_UNKNOWN_STAGE", + "UPDATE_STATE_CODE_UNKNOWN_STARTUP", + "UPDATE_STATUS_ERROR_CODE_COMPLETE_STAGE", + "UPDATE_STATUS_ERROR_CODE_COMPLETE_STARTUP", + "UPDATE_STATUS_ERROR_CODE_PARTIAL_STAGE", + "UPDATE_STATUS_ERROR_CODE_PARTIAL_STARTUP", + "UPDATE_STATUS_ERROR_CODE_UNKNOWN_STAGE", + "UPDATE_STATUS_ERROR_CODE_UNKNOWN_STARTUP", + "UPDATE_UNABLE_TO_APPLY_EXTERNAL", + "UPDATE_UNABLE_TO_APPLY_NOTIFY", + "UPDATE_WIZ_LAST_PAGE_CODE", + "URLCLASSIFIER_CL_CHECK_TIME", + "URLCLASSIFIER_CL_UPDATE_TIME", + "URLCLASSIFIER_LC_COMPLETIONS", + "URLCLASSIFIER_LC_PREFIXES", + "URLCLASSIFIER_LOOKUP_TIME", + "URLCLASSIFIER_PS_CONSTRUCT_TIME", + "URLCLASSIFIER_PS_FAILURE", + "URLCLASSIFIER_PS_FALLOCATE_TIME", + "URLCLASSIFIER_PS_FILELOAD_TIME", + "URL_PATH_CONTAINS_EXCLAMATION_DOUBLE_SLASH", + "URL_PATH_CONTAINS_EXCLAMATION_SLASH", + "URL_PATH_ENDS_IN_EXCLAMATION", + "USE_COUNTER2_DEPRECATED_AppCache_DOCUMENT", + "USE_COUNTER2_DEPRECATED_AppCache_PAGE", + "USE_COUNTER2_DEPRECATED_Components_DOCUMENT", + "USE_COUNTER2_DEPRECATED_Components_PAGE", + "USE_COUNTER2_DEPRECATED_CreateAttributeNS_DOCUMENT", + "USE_COUNTER2_DEPRECATED_CreateAttributeNS_PAGE", + "USE_COUNTER2_DEPRECATED_CreateAttribute_DOCUMENT", + "USE_COUNTER2_DEPRECATED_CreateAttribute_PAGE", + "USE_COUNTER2_DEPRECATED_DOMExceptionCode_DOCUMENT", + "USE_COUNTER2_DEPRECATED_DOMExceptionCode_PAGE", + "USE_COUNTER2_DEPRECATED_DataContainerEvent_DOCUMENT", + "USE_COUNTER2_DEPRECATED_DataContainerEvent_PAGE", + "USE_COUNTER2_DEPRECATED_EnablePrivilege_DOCUMENT", + "USE_COUNTER2_DEPRECATED_EnablePrivilege_PAGE", + "USE_COUNTER2_DEPRECATED_GetAttributeNodeNS_DOCUMENT", + "USE_COUNTER2_DEPRECATED_GetAttributeNodeNS_PAGE", + "USE_COUNTER2_DEPRECATED_GetAttributeNode_DOCUMENT", + "USE_COUNTER2_DEPRECATED_GetAttributeNode_PAGE", + "USE_COUNTER2_DEPRECATED_GetPreventDefault_DOCUMENT", + "USE_COUNTER2_DEPRECATED_GetPreventDefault_PAGE", + "USE_COUNTER2_DEPRECATED_GetSetUserData_DOCUMENT", + "USE_COUNTER2_DEPRECATED_GetSetUserData_PAGE", + "USE_COUNTER2_DEPRECATED_ImportXULIntoContent_DOCUMENT", + "USE_COUNTER2_DEPRECATED_ImportXULIntoContent_PAGE", + "USE_COUNTER2_DEPRECATED_LenientThis_DOCUMENT", + "USE_COUNTER2_DEPRECATED_LenientThis_PAGE", + "USE_COUNTER2_DEPRECATED_MozGetAsFile_DOCUMENT", + "USE_COUNTER2_DEPRECATED_MozGetAsFile_PAGE", + "USE_COUNTER2_DEPRECATED_MutationEvent_DOCUMENT", + "USE_COUNTER2_DEPRECATED_MutationEvent_PAGE", + "USE_COUNTER2_DEPRECATED_NavigatorGetUserMedia_DOCUMENT", + "USE_COUNTER2_DEPRECATED_NavigatorGetUserMedia_PAGE", + "USE_COUNTER2_DEPRECATED_NoExposedProps_DOCUMENT", + "USE_COUNTER2_DEPRECATED_NoExposedProps_PAGE", + "USE_COUNTER2_DEPRECATED_NodeIteratorDetach_DOCUMENT", + "USE_COUNTER2_DEPRECATED_NodeIteratorDetach_PAGE", + "USE_COUNTER2_DEPRECATED_NodeValue_DOCUMENT", + "USE_COUNTER2_DEPRECATED_NodeValue_PAGE", + "USE_COUNTER2_DEPRECATED_OwnerElement_DOCUMENT", + "USE_COUNTER2_DEPRECATED_OwnerElement_PAGE", + "USE_COUNTER2_DEPRECATED_PannerNodeDoppler_DOCUMENT", + "USE_COUNTER2_DEPRECATED_PannerNodeDoppler_PAGE", + "USE_COUNTER2_DEPRECATED_PrefixedFullscreenAPI_DOCUMENT", + "USE_COUNTER2_DEPRECATED_PrefixedFullscreenAPI_PAGE", + "USE_COUNTER2_DEPRECATED_PrefixedVisibilityAPI_DOCUMENT", + "USE_COUNTER2_DEPRECATED_PrefixedVisibilityAPI_PAGE", + "USE_COUNTER2_DEPRECATED_RemoveAttributeNode_DOCUMENT", + "USE_COUNTER2_DEPRECATED_RemoveAttributeNode_PAGE", + "USE_COUNTER2_DEPRECATED_SetAttributeNodeNS_DOCUMENT", + "USE_COUNTER2_DEPRECATED_SetAttributeNodeNS_PAGE", + "USE_COUNTER2_DEPRECATED_SetAttributeNode_DOCUMENT", + "USE_COUNTER2_DEPRECATED_SetAttributeNode_PAGE", + "USE_COUNTER2_DEPRECATED_ShowModalDialog_DOCUMENT", + "USE_COUNTER2_DEPRECATED_ShowModalDialog_PAGE", + "USE_COUNTER2_DEPRECATED_SyncXMLHttpRequest_DOCUMENT", + "USE_COUNTER2_DEPRECATED_SyncXMLHttpRequest_PAGE", + "USE_COUNTER2_DEPRECATED_TextContent_DOCUMENT", + "USE_COUNTER2_DEPRECATED_TextContent_PAGE", + "USE_COUNTER2_DEPRECATED_UseOfCaptureEvents_DOCUMENT", + "USE_COUNTER2_DEPRECATED_UseOfCaptureEvents_PAGE", + "USE_COUNTER2_DEPRECATED_UseOfDOM3LoadMethod_DOCUMENT", + "USE_COUNTER2_DEPRECATED_UseOfDOM3LoadMethod_PAGE", + "USE_COUNTER2_DEPRECATED_UseOfReleaseEvents_DOCUMENT", + "USE_COUNTER2_DEPRECATED_UseOfReleaseEvents_PAGE", + "USE_COUNTER2_DEPRECATED_WebrtcDeprecatedPrefix_DOCUMENT", + "USE_COUNTER2_DEPRECATED_WebrtcDeprecatedPrefix_PAGE", + "USE_COUNTER2_DEPRECATED_Window_Content_DOCUMENT", + "USE_COUNTER2_DEPRECATED_Window_Content_PAGE", + "USE_COUNTER2_DEPRECATED_Window_Controllers_DOCUMENT", + "USE_COUNTER2_DEPRECATED_Window_Controllers_PAGE", + "USE_COUNTER2_EXTERNAL_ADDSEARCHENGINE_DOCUMENT", + "USE_COUNTER2_EXTERNAL_ADDSEARCHENGINE_PAGE", + "USE_COUNTER2_PROPERTY_FILLOPACITY_DOCUMENT", + "USE_COUNTER2_PROPERTY_FILLOPACITY_PAGE", + "USE_COUNTER2_PROPERTY_FILL_DOCUMENT", + "USE_COUNTER2_PROPERTY_FILL_PAGE", + "USE_COUNTER2_PUSHMANAGER_SUBSCRIBE_DOCUMENT", + "USE_COUNTER2_PUSHMANAGER_SUBSCRIBE_PAGE", + "USE_COUNTER2_PUSHSUBSCRIPTION_UNSUBSCRIBE_DOCUMENT", + "USE_COUNTER2_PUSHSUBSCRIPTION_UNSUBSCRIBE_PAGE", + "USE_COUNTER2_SVGSVGELEMENT_CURRENTSCALE_getter_DOCUMENT", + "USE_COUNTER2_SVGSVGELEMENT_CURRENTSCALE_getter_PAGE", + "USE_COUNTER2_SVGSVGELEMENT_CURRENTSCALE_setter_DOCUMENT", + "USE_COUNTER2_SVGSVGELEMENT_CURRENTSCALE_setter_PAGE", + "USE_COUNTER2_SVGSVGELEMENT_GETELEMENTBYID_DOCUMENT", + "USE_COUNTER2_SVGSVGELEMENT_GETELEMENTBYID_PAGE", + "USE_COUNTER2_WINDOW_SIDEBAR_getter_DOCUMENT", + "USE_COUNTER2_WINDOW_SIDEBAR_getter_PAGE", + "USE_COUNTER2_WINDOW_SIDEBAR_setter_DOCUMENT", + "USE_COUNTER2_WINDOW_SIDEBAR_setter_PAGE", + "VIDEO_ADOBE_GMP_DISAPPEARED", + "VIDEO_ADOBE_GMP_MISSING_FILES", + "VIDEO_CANPLAYTYPE_H264_CONSTRAINT_SET_FLAG", + "VIDEO_CANPLAYTYPE_H264_LEVEL", + "VIDEO_CANPLAYTYPE_H264_PROFILE", + "VIDEO_CAN_CREATE_AAC_DECODER", + "VIDEO_CAN_CREATE_H264_DECODER", + "VIDEO_DECODED_H264_SPS_CONSTRAINT_SET_FLAG", + "VIDEO_DECODED_H264_SPS_LEVEL", + "VIDEO_DECODED_H264_SPS_PROFILE", + "VIDEO_EME_ADOBE_HIDDEN_REASON", + "VIDEO_EME_ADOBE_INSTALL_FAILED_REASON", + "VIDEO_EME_ADOBE_UNSUPPORTED_REASON", + "VIDEO_EME_PLAY_SUCCESS", + "VIDEO_EME_REQUEST_FAILURE_LATENCY_MS", + "VIDEO_EME_REQUEST_SUCCESS_LATENCY_MS", + "VIDEO_H264_SPS_MAX_NUM_REF_FRAMES", + "VIDEO_MSE_BUFFERING_COUNT", + "VIDEO_MSE_JOIN_LATENCY_MS", + "VIDEO_MSE_PLAY_TIME_MS", + "VIDEO_MSE_UNLOAD_STATE", + "VIDEO_OPENH264_GMP_DISAPPEARED", + "VIDEO_OPENH264_GMP_MISSING_FILES", + "VIEW_SOURCE_EXTERNAL_RESULT_BOOLEAN", + "VIEW_SOURCE_IN_BROWSER_OPENED_BOOLEAN", + "VIEW_SOURCE_IN_WINDOW_OPENED_BOOLEAN", + "WEAVE_COMPLETE_SUCCESS_COUNT", + "WEAVE_CONFIGURED", + "WEAVE_CONFIGURED_MASTER_PASSWORD", + "WEAVE_START_COUNT", + "WEBCRYPTO_ALG", + "WEBCRYPTO_EXTRACTABLE_ENC", + "WEBCRYPTO_EXTRACTABLE_GENERATE", + "WEBCRYPTO_EXTRACTABLE_IMPORT", + "WEBCRYPTO_EXTRACTABLE_SIG", + "WEBCRYPTO_METHOD", + "WEBCRYPTO_RESOLVED", + "WEBFONT_COMPRESSION_WOFF", + "WEBFONT_COMPRESSION_WOFF2", + "WEBFONT_DOWNLOAD_TIME", + "WEBFONT_DOWNLOAD_TIME_AFTER_START", + "WEBFONT_FONTTYPE", + "WEBFONT_PER_PAGE", + "WEBFONT_SIZE", + "WEBFONT_SIZE_PER_PAGE", + "WEBFONT_SRCTYPE", + "WEBRTC_AUDIO_QUALITY_INBOUND_BANDWIDTH_KBITS", + "WEBRTC_AUDIO_QUALITY_INBOUND_JITTER", + "WEBRTC_AUDIO_QUALITY_INBOUND_PACKETLOSS_RATE", + "WEBRTC_AUDIO_QUALITY_OUTBOUND_BANDWIDTH_KBITS", + "WEBRTC_AUDIO_QUALITY_OUTBOUND_JITTER", + "WEBRTC_AUDIO_QUALITY_OUTBOUND_PACKETLOSS_RATE", + "WEBRTC_AUDIO_QUALITY_OUTBOUND_RTT", + "WEBRTC_AVSYNC_WHEN_AUDIO_LAGS_VIDEO_MS", + "WEBRTC_AVSYNC_WHEN_VIDEO_LAGS_AUDIO_MS", + "WEBRTC_CALL_COUNT", + "WEBRTC_CALL_DURATION", + "WEBRTC_CALL_TYPE", + "WEBRTC_DATACHANNEL_NEGOTIATED", + "WEBRTC_GET_USER_MEDIA_SECURE_ORIGIN", + "WEBRTC_GET_USER_MEDIA_TYPE", + "WEBRTC_ICE_ADD_CANDIDATE_ERRORS_GIVEN_FAILURE", + "WEBRTC_ICE_ADD_CANDIDATE_ERRORS_GIVEN_SUCCESS", + "WEBRTC_ICE_FAILURE_TIME", + "WEBRTC_ICE_FINAL_CONNECTION_STATE", + "WEBRTC_ICE_LATE_TRICKLE_ARRIVAL_TIME", + "WEBRTC_ICE_ON_TIME_TRICKLE_ARRIVAL_TIME", + "WEBRTC_ICE_SUCCESS_RATE", + "WEBRTC_ICE_SUCCESS_TIME", + "WEBRTC_LOAD_STATE_NORMAL", + "WEBRTC_LOAD_STATE_NORMAL_SHORT", + "WEBRTC_LOAD_STATE_RELAXED", + "WEBRTC_LOAD_STATE_RELAXED_SHORT", + "WEBRTC_LOAD_STATE_STRESSED", + "WEBRTC_LOAD_STATE_STRESSED_SHORT", + "WEBRTC_MAX_AUDIO_RECEIVE_TRACK", + "WEBRTC_MAX_AUDIO_SEND_TRACK", + "WEBRTC_MAX_VIDEO_RECEIVE_TRACK", + "WEBRTC_MAX_VIDEO_SEND_TRACK", + "WEBRTC_RENEGOTIATIONS", + "WEBRTC_STUN_RATE_LIMIT_EXCEEDED_BY_TYPE_GIVEN_FAILURE", + "WEBRTC_STUN_RATE_LIMIT_EXCEEDED_BY_TYPE_GIVEN_SUCCESS", + "WEBRTC_VIDEO_DECODER_BITRATE_AVG_PER_CALL_KBPS", + "WEBRTC_VIDEO_DECODER_BITRATE_STD_DEV_PER_CALL_KBPS", + "WEBRTC_VIDEO_DECODER_DISCARDED_PACKETS_PER_CALL_PPM", + "WEBRTC_VIDEO_DECODER_FRAMERATE_10X_STD_DEV_PER_CALL", + "WEBRTC_VIDEO_DECODER_FRAMERATE_AVG_PER_CALL", + "WEBRTC_VIDEO_DECODE_ERROR_TIME_PERMILLE", + "WEBRTC_VIDEO_ENCODER_BITRATE_AVG_PER_CALL_KBPS", + "WEBRTC_VIDEO_ENCODER_BITRATE_STD_DEV_PER_CALL_KBPS", + "WEBRTC_VIDEO_ENCODER_DROPPED_FRAMES_PER_CALL_FPM", + "WEBRTC_VIDEO_ENCODER_FRAMERATE_10X_STD_DEV_PER_CALL", + "WEBRTC_VIDEO_ENCODER_FRAMERATE_AVG_PER_CALL", + "WEBRTC_VIDEO_ERROR_RECOVERY_MS", + "WEBRTC_VIDEO_QUALITY_INBOUND_BANDWIDTH_KBITS", + "WEBRTC_VIDEO_QUALITY_INBOUND_JITTER", + "WEBRTC_VIDEO_QUALITY_INBOUND_PACKETLOSS_RATE", + "WEBRTC_VIDEO_QUALITY_OUTBOUND_BANDWIDTH_KBITS", + "WEBRTC_VIDEO_QUALITY_OUTBOUND_JITTER", + "WEBRTC_VIDEO_QUALITY_OUTBOUND_PACKETLOSS_RATE", + "WEBRTC_VIDEO_QUALITY_OUTBOUND_RTT", + "WEBRTC_VIDEO_RECOVERY_AFTER_ERROR_PER_MIN", + "WEBRTC_VIDEO_RECOVERY_BEFORE_ERROR_PER_MIN", + "WEBSOCKETS_HANDSHAKE_TYPE", + "WORD_CACHE_HITS_CHROME", + "WORD_CACHE_HITS_CONTENT", + "WORD_CACHE_MISSES_CHROME", + "WORD_CACHE_MISSES_CONTENT", + "XMLHTTPREQUEST_ASYNC_OR_SYNC", + "XUL_BACKGROUND_REFLOW_MS", + "XUL_CACHE_DISABLED", + "XUL_FOREGROUND_REFLOW_MS", + "XUL_INITIAL_FRAME_CONSTRUCTION" + ], "n_buckets": [ "MEMORY_JS_MAIN_RUNTIME_TEMPORARY_PEAK", "MEMORY_JS_GC_HEAP", diff --git a/toolkit/components/telemetry/histogram_tools.py b/toolkit/components/telemetry/histogram_tools.py index d713b6d763b0..f9d5452a45c8 100644 --- a/toolkit/components/telemetry/histogram_tools.py +++ b/toolkit/components/telemetry/histogram_tools.py @@ -238,7 +238,10 @@ associated with the histogram. Returns None if no guarding is necessary.""" def check_bug_numbers(name, definition): bug_numbers = definition.get('bug_numbers') if not bug_numbers: - return + if whitelists is None or name in whitelists['bug_numbers']: + return + else: + raise KeyError, 'New histogram "%s" must have a bug_numbers field.' % name if not isinstance(bug_numbers, list): raise ValueError, 'bug_numbers field for "%s" should be an array' % (name) From 45010d8fc67d326eb3a3e3adb65c3436325126e6 Mon Sep 17 00:00:00 2001 From: Chris H-C Date: Tue, 23 Feb 2016 10:48:13 -0500 Subject: [PATCH 06/60] Bug 1219768 - make alert_emails field mandatory for new histograms. r=gfritzsche alert_emails tell us who is interested in a particular histogram. If there's no one interested, then the histogram shouldn't exist. MozReview-Commit-ID: 90Yqof3dbsd --HG-- extra : transplant_source : %F4%85%26mP-%18%09%AF%E0%93%DEt%9B%E2V%033%DD%95 --- .../telemetry/histogram-whitelists.json | 1194 +++++++++++++++++ .../components/telemetry/histogram_tools.py | 8 +- 2 files changed, 1199 insertions(+), 3 deletions(-) diff --git a/toolkit/components/telemetry/histogram-whitelists.json b/toolkit/components/telemetry/histogram-whitelists.json index 7dacfa55ef8e..4bc648a048ba 100644 --- a/toolkit/components/telemetry/histogram-whitelists.json +++ b/toolkit/components/telemetry/histogram-whitelists.json @@ -1,4 +1,1198 @@ { + "alert_emails": [ + "A11Y_CONSUMERS", + "A11Y_IATABLE_USAGE_FLAG", + "A11Y_INSTANTIATED_FLAG", + "A11Y_ISIMPLEDOM_USAGE_FLAG", + "A11Y_UPDATE_TIME", + "ADDON_SHIM_USAGE", + "APPLICATION_REPUTATION_COUNT", + "APPLICATION_REPUTATION_LOCAL", + "APPLICATION_REPUTATION_SERVER", + "APPLICATION_REPUTATION_SERVER_VERDICT", + "APPLICATION_REPUTATION_SHOULD_BLOCK", + "AUDIOSTREAM_FIRST_OPEN_MS", + "AUDIOSTREAM_LATER_OPEN_MS", + "AUTO_REJECTED_TRANSLATION_OFFERS", + "BACKGROUNDFILESAVER_THREAD_COUNT", + "BAD_FALLBACK_FONT", + "BROWSERPROVIDER_XUL_IMPORT_BOOKMARKS", + "BROWSERPROVIDER_XUL_IMPORT_HISTORY", + "BROWSERPROVIDER_XUL_IMPORT_TIME", + "BROWSER_IS_ASSIST_DEFAULT", + "BROWSER_IS_USER_DEFAULT", + "BROWSER_IS_USER_DEFAULT_ERROR", + "BROWSER_SET_DEFAULT_ALWAYS_CHECK", + "BROWSER_SET_DEFAULT_DIALOG_PROMPT_RAWCOUNT", + "BROWSER_SET_DEFAULT_ERROR", + "BROWSER_SET_DEFAULT_RESULT", + "BROWSER_SET_DEFAULT_TIME_TO_COMPLETION_SECONDS", + "BR_9_2_1_SUBJECT_ALT_NAMES", + "BR_9_2_2_SUBJECT_COMMON_NAME", + "CACHE_DEVICE_SEARCH_2", + "CACHE_DISK_SEARCH_2", + "CACHE_LM_INCONSISTENT", + "CACHE_MEMORY_SEARCH_2", + "CACHE_OFFLINE_SEARCH_2", + "CACHE_SERVICE_LOCK_WAIT_2", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_2", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSASYNCDOOMEVENT_RUN", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSBLOCKONCACHETHREADEVENT_RUN", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_CLOSE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_DOOM", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_DOOMANDFAILPENDINGREQUESTS", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETCACHEELEMENT", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETCLIENTID", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETDATASIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETDEVICEID", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETEXPIRATIONTIME", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETFETCHCOUNT", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETFILE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETKEY", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETLASTFETCHED", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETLASTMODIFIED", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETMETADATAELEMENT", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETPREDICTEDDATASIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETSECURITYINFO", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETSTORAGEDATASIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_GETSTORAGEPOLICY", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_ISSTREAMBASED", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_MARKVALID", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_OPENINPUTSTREAM", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_OPENOUTPUTSTREAM", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_REQUESTDATASIZECHANGE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_SETCACHEELEMENT", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_SETDATASIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_SETEXPIRATIONTIME", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_SETMETADATAELEMENT", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_SETPREDICTEDDATASIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_SETSECURITYINFO", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_SETSTORAGEPOLICY", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHEENTRYDESCRIPTOR_VISITMETADATA", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_CLOSEALLSTREAMS", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_DISKDEVICEHEAPSIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_EVICTENTRIESFORCLIENT", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_GETCACHEIOTARGET", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_ISSTORAGEENABLEDFORPOLICY", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_ONPROFILECHANGED", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_ONPROFILESHUTDOWN", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_OPENCACHEENTRY", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_PROCESSREQUEST", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SETDISKCACHECAPACITY", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SETDISKCACHEENABLED", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SETDISKCACHEMAXENTRYSIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SETDISKSMARTSIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SETMEMORYCACHE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SETMEMORYCACHEMAXENTRYSIZE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SETOFFLINECACHECAPACITY", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SETOFFLINECACHEENABLED", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_SHUTDOWN", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCACHESERVICE_VISITENTRIES", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSCOMPRESSOUTPUTSTREAMWRAPPER_RELEASE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSDECOMPRESSINPUTSTREAMWRAPPER_RELEASE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSDISKCACHEBINDING_DESTRUCTOR", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSDISKCACHEDEVICEDEACTIVATEENTRYEVENT_RUN", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSDISKCACHEMAP_REVALIDATION", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSDISKCACHESTREAMIO_CLOSEOUTPUTSTREAM", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSDISKCACHESTREAMIO_WRITE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSDOOMEVENT_RUN", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSEVICTDISKCACHEENTRIESEVENT_RUN", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSINPUTSTREAMWRAPPER_CLOSEINTERNAL", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSINPUTSTREAMWRAPPER_LAZYINIT", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSINPUTSTREAMWRAPPER_RELEASE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSOUTPUTSTREAMWRAPPER_CLOSEINTERNAL", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSOUTPUTSTREAMWRAPPER_LAZYINIT", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSOUTPUTSTREAMWRAPPER_RELEASE", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSPROCESSREQUESTEVENT_RUN", + "CACHE_SERVICE_LOCK_WAIT_MAINTHREAD_NSSETDISKSMARTSIZECALLBACK_NOTIFY", + "CANVAS_2D_USED", + "CANVAS_WEBGL_USED", + "CERT_CHAIN_KEY_SIZE_STATUS", + "CERT_CHAIN_SHA1_POLICY_STATUS", + "CERT_OCSP_ENABLED", + "CERT_OCSP_REQUIRED", + "CERT_VALIDATION_HTTP_REQUEST_CANCELED_TIME", + "CERT_VALIDATION_HTTP_REQUEST_FAILED_TIME", + "CERT_VALIDATION_HTTP_REQUEST_RESULT", + "CERT_VALIDATION_HTTP_REQUEST_SUCCEEDED_TIME", + "CERT_VALIDATION_SUCCESS_BY_CA", + "CHANGES_OF_DETECTED_LANGUAGE", + "CHANGES_OF_TARGET_LANGUAGE", + "CHARSET_OVERRIDE_SITUATION", + "CHARSET_OVERRIDE_USED", + "CHECK_ADDONS_MODIFIED_MS", + "CHECK_JAVA_ENABLED", + "COMPONENTS_SHIM_ACCESSED_BY_CONTENT", + "COMPOSITE_FRAME_ROUNDTRIP_TIME", + "COMPOSITE_TIME", + "CONTENT_DOCUMENTS_DESTROYED", + "COOKIES_3RDPARTY_NUM_ATTEMPTS_ACCEPTED", + "COOKIES_3RDPARTY_NUM_ATTEMPTS_BLOCKED", + "COOKIES_3RDPARTY_NUM_SITES_ACCEPTED", + "COOKIES_3RDPARTY_NUM_SITES_BLOCKED", + "CRASH_STORE_COMPRESSED_BYTES", + "DATABASE_LOCKED_EXCEPTION", + "DATABASE_SUCCESSFUL_UNLOCK", + "DATA_STORAGE_ENTRIES", + "DECODER_INSTANTIATED_IBM866", + "DECODER_INSTANTIATED_ISO2022JP", + "DECODER_INSTANTIATED_ISO_8859_5", + "DECODER_INSTANTIATED_KOI8R", + "DECODER_INSTANTIATED_KOI8U", + "DECODER_INSTANTIATED_MACARABIC", + "DECODER_INSTANTIATED_MACCE", + "DECODER_INSTANTIATED_MACCROATIAN", + "DECODER_INSTANTIATED_MACCYRILLIC", + "DECODER_INSTANTIATED_MACDEVANAGARI", + "DECODER_INSTANTIATED_MACFARSI", + "DECODER_INSTANTIATED_MACGREEK", + "DECODER_INSTANTIATED_MACGUJARATI", + "DECODER_INSTANTIATED_MACGURMUKHI", + "DECODER_INSTANTIATED_MACHEBREW", + "DECODER_INSTANTIATED_MACICELANDIC", + "DECODER_INSTANTIATED_MACROMANIAN", + "DECODER_INSTANTIATED_MACTURKISH", + "DEFECTIVE_PERMISSIONS_SQL_REMOVED", + "DEFERRED_FINALIZE_ASYNC", + "DENIED_TRANSLATION_OFFERS", + "DEVICE_RESET_REASON", + "DEVTOOLS_ANIMATIONINSPECTOR_OPENED_BOOLEAN", + "DEVTOOLS_ANIMATIONINSPECTOR_OPENED_PER_USER_FLAG", + "DEVTOOLS_ANIMATIONINSPECTOR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_BROWSERCONSOLE_OPENED_BOOLEAN", + "DEVTOOLS_BROWSERCONSOLE_OPENED_PER_USER_FLAG", + "DEVTOOLS_BROWSERCONSOLE_TIME_ACTIVE_SECONDS", + "DEVTOOLS_CANVASDEBUGGER_OPENED_BOOLEAN", + "DEVTOOLS_CANVASDEBUGGER_OPENED_PER_USER_FLAG", + "DEVTOOLS_CANVASDEBUGGER_TIME_ACTIVE_SECONDS", + "DEVTOOLS_COMPUTEDVIEW_OPENED_BOOLEAN", + "DEVTOOLS_COMPUTEDVIEW_OPENED_PER_USER_FLAG", + "DEVTOOLS_COMPUTEDVIEW_TIME_ACTIVE_SECONDS", + "DEVTOOLS_CUSTOM_OPENED_BOOLEAN", + "DEVTOOLS_CUSTOM_OPENED_PER_USER_FLAG", + "DEVTOOLS_CUSTOM_TIME_ACTIVE_SECONDS", + "DEVTOOLS_DEBUGGER_DISPLAY_SOURCE_LOCAL_MS", + "DEVTOOLS_DEBUGGER_DISPLAY_SOURCE_REMOTE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_ADDONDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_ASSIGN_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_BINDINGS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_BLACKBOX_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_CLIENTEVALUATE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_DELETE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_DETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_DISPLAYSTRING_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_ENUMPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_EVENTLISTENERS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_FRAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_GET_EXECUTABLE_LINES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_INTERRUPT_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTADDONS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTPROCESSES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTTABS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTWORKERS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_NAVIGATETO_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_OWNPROPERTYNAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PARAMETERNAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROPERTY_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOCOLDESCRIPTION_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOTYPEANDPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOTYPESANDPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOTYPE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RECONFIGURETAB_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RECONFIGURETHREAD_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RELEASEMANY_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RELEASE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RELOAD_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_RESUME_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_SCOPE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_SOURCES_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_STARTTRACE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_STOPTRACE_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_SUBSTRING_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_TABDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_THREADDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_THREADGRIPS_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_TRACERDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_UNBLACKBOX_MS", + "DEVTOOLS_DEBUGGER_RDP_LOCAL_WORKERDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_ADDONDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_ASSIGN_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_BINDINGS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_BLACKBOX_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_CLIENTEVALUATE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_DELETE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_DETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_DISPLAYSTRING_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_ENUMPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_EVENTLISTENERS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_FRAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_GET_EXECUTABLE_LINES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_INTERRUPT_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTADDONS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTPROCESSES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTTABS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTWORKERS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_NAVIGATETO_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_OWNPROPERTYNAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PARAMETERNAMES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROPERTY_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOCOLDESCRIPTION_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOTYPEANDPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOTYPESANDPROPERTIES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOTYPE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RECONFIGURETAB_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RECONFIGURETHREAD_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RELEASEMANY_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RELEASE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RELOAD_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_RESUME_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_SCOPE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_SOURCES_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_STARTTRACE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_STOPTRACE_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_SUBSTRING_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_TABDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_THREADDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_THREADGRIPS_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_TRACERDETACH_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_UNBLACKBOX_MS", + "DEVTOOLS_DEBUGGER_RDP_REMOTE_WORKERDETACH_MS", + "DEVTOOLS_DEVELOPERTOOLBAR_OPENED_BOOLEAN", + "DEVTOOLS_DEVELOPERTOOLBAR_OPENED_PER_USER_FLAG", + "DEVTOOLS_DEVELOPERTOOLBAR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_EYEDROPPER_OPENED_BOOLEAN", + "DEVTOOLS_EYEDROPPER_OPENED_PER_USER_FLAG", + "DEVTOOLS_FONTINSPECTOR_OPENED_BOOLEAN", + "DEVTOOLS_FONTINSPECTOR_OPENED_PER_USER_FLAG", + "DEVTOOLS_FONTINSPECTOR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_HEAP_SNAPSHOT_EDGE_COUNT", + "DEVTOOLS_HEAP_SNAPSHOT_NODE_COUNT", + "DEVTOOLS_INSPECTOR_OPENED_BOOLEAN", + "DEVTOOLS_INSPECTOR_OPENED_PER_USER_FLAG", + "DEVTOOLS_INSPECTOR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_JSBROWSERDEBUGGER_OPENED_BOOLEAN", + "DEVTOOLS_JSBROWSERDEBUGGER_OPENED_PER_USER_FLAG", + "DEVTOOLS_JSBROWSERDEBUGGER_TIME_ACTIVE_SECONDS", + "DEVTOOLS_JSDEBUGGER_OPENED_BOOLEAN", + "DEVTOOLS_JSDEBUGGER_OPENED_PER_USER_FLAG", + "DEVTOOLS_JSDEBUGGER_TIME_ACTIVE_SECONDS", + "DEVTOOLS_JSPROFILER_OPENED_BOOLEAN", + "DEVTOOLS_JSPROFILER_OPENED_PER_USER_FLAG", + "DEVTOOLS_JSPROFILER_TIME_ACTIVE_SECONDS", + "DEVTOOLS_LAYOUTVIEW_OPENED_BOOLEAN", + "DEVTOOLS_LAYOUTVIEW_OPENED_PER_USER_FLAG", + "DEVTOOLS_LAYOUTVIEW_TIME_ACTIVE_SECONDS", + "DEVTOOLS_MEMORY_BREAKDOWN_CENSUS_COUNT", + "DEVTOOLS_MEMORY_BREAKDOWN_DOMINATOR_TREE_COUNT", + "DEVTOOLS_MEMORY_DIFF_CENSUS", + "DEVTOOLS_MEMORY_DOMINATOR_TREE_COUNT", + "DEVTOOLS_MEMORY_EXPORT_SNAPSHOT_COUNT", + "DEVTOOLS_MEMORY_FILTER_CENSUS", + "DEVTOOLS_MEMORY_IMPORT_SNAPSHOT_COUNT", + "DEVTOOLS_MEMORY_INVERTED_CENSUS", + "DEVTOOLS_MEMORY_OPENED_BOOLEAN", + "DEVTOOLS_MEMORY_OPENED_PER_USER_FLAG", + "DEVTOOLS_MEMORY_TAKE_SNAPSHOT_COUNT", + "DEVTOOLS_MEMORY_TIME_ACTIVE_SECONDS", + "DEVTOOLS_MENU_EYEDROPPER_OPENED_BOOLEAN", + "DEVTOOLS_MENU_EYEDROPPER_OPENED_PER_USER_FLAG", + "DEVTOOLS_NETMONITOR_OPENED_BOOLEAN", + "DEVTOOLS_NETMONITOR_OPENED_PER_USER_FLAG", + "DEVTOOLS_NETMONITOR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_OPTIONS_OPENED_BOOLEAN", + "DEVTOOLS_OPTIONS_OPENED_PER_USER_FLAG", + "DEVTOOLS_OPTIONS_TIME_ACTIVE_SECONDS", + "DEVTOOLS_OS_ENUMERATED_PER_USER", + "DEVTOOLS_OS_IS_64_BITS_PER_USER", + "DEVTOOLS_PAINTFLASHING_OPENED_BOOLEAN", + "DEVTOOLS_PAINTFLASHING_OPENED_PER_USER_FLAG", + "DEVTOOLS_PAINTFLASHING_TIME_ACTIVE_SECONDS", + "DEVTOOLS_PERFTOOLS_CONSOLE_RECORDING_COUNT", + "DEVTOOLS_PERFTOOLS_RECORDING_COUNT", + "DEVTOOLS_PERFTOOLS_RECORDING_DURATION_MS", + "DEVTOOLS_PERFTOOLS_RECORDING_EXPORT_FLAG", + "DEVTOOLS_PERFTOOLS_RECORDING_FEATURES_USED", + "DEVTOOLS_PERFTOOLS_RECORDING_IMPORT_FLAG", + "DEVTOOLS_PERFTOOLS_SELECTED_VIEW_MS", + "DEVTOOLS_PICKER_EYEDROPPER_OPENED_BOOLEAN", + "DEVTOOLS_PICKER_EYEDROPPER_OPENED_PER_USER_FLAG", + "DEVTOOLS_READ_HEAP_SNAPSHOT_MS", + "DEVTOOLS_RESPONSIVE_OPENED_BOOLEAN", + "DEVTOOLS_RESPONSIVE_OPENED_PER_USER_FLAG", + "DEVTOOLS_RESPONSIVE_TIME_ACTIVE_SECONDS", + "DEVTOOLS_RULEVIEW_OPENED_BOOLEAN", + "DEVTOOLS_RULEVIEW_OPENED_PER_USER_FLAG", + "DEVTOOLS_RULEVIEW_TIME_ACTIVE_SECONDS", + "DEVTOOLS_SAVE_HEAP_SNAPSHOT_MS", + "DEVTOOLS_SCRATCHPAD_OPENED_BOOLEAN", + "DEVTOOLS_SCRATCHPAD_OPENED_PER_USER_FLAG", + "DEVTOOLS_SCRATCHPAD_TIME_ACTIVE_SECONDS", + "DEVTOOLS_SCREEN_RESOLUTION_ENUMERATED_PER_USER", + "DEVTOOLS_SHADEREDITOR_OPENED_BOOLEAN", + "DEVTOOLS_SHADEREDITOR_OPENED_PER_USER_FLAG", + "DEVTOOLS_SHADEREDITOR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_STORAGE_OPENED_BOOLEAN", + "DEVTOOLS_STORAGE_OPENED_PER_USER_FLAG", + "DEVTOOLS_STORAGE_TIME_ACTIVE_SECONDS", + "DEVTOOLS_STYLEEDITOR_OPENED_BOOLEAN", + "DEVTOOLS_STYLEEDITOR_OPENED_PER_USER_FLAG", + "DEVTOOLS_STYLEEDITOR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_TABS_OPEN_AVERAGE_LINEAR", + "DEVTOOLS_TABS_OPEN_PEAK_LINEAR", + "DEVTOOLS_TABS_PINNED_AVERAGE_LINEAR", + "DEVTOOLS_TABS_PINNED_PEAK_LINEAR", + "DEVTOOLS_TILT_OPENED_BOOLEAN", + "DEVTOOLS_TILT_OPENED_PER_USER_FLAG", + "DEVTOOLS_TILT_TIME_ACTIVE_SECONDS", + "DEVTOOLS_TOOLBOX_OPENED_BOOLEAN", + "DEVTOOLS_TOOLBOX_OPENED_PER_USER_FLAG", + "DEVTOOLS_TOOLBOX_TIME_ACTIVE_SECONDS", + "DEVTOOLS_WEBAUDIOEDITOR_OPENED_BOOLEAN", + "DEVTOOLS_WEBAUDIOEDITOR_OPENED_PER_USER_FLAG", + "DEVTOOLS_WEBAUDIOEDITOR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_WEBCONSOLE_OPENED_BOOLEAN", + "DEVTOOLS_WEBCONSOLE_OPENED_PER_USER_FLAG", + "DEVTOOLS_WEBCONSOLE_TIME_ACTIVE_SECONDS", + "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_APP_TYPE", + "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_ID", + "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_OS", + "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_PLATFORM_VERSION", + "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_PROCESSOR", + "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_TYPE", + "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_VERSION", + "DEVTOOLS_WEBIDE_CONNECTION_DEBUG_USED", + "DEVTOOLS_WEBIDE_CONNECTION_PLAY_USED", + "DEVTOOLS_WEBIDE_CONNECTION_RESULT", + "DEVTOOLS_WEBIDE_CONNECTION_TIME_SECONDS", + "DEVTOOLS_WEBIDE_IMPORT_PROJECT_BOOLEAN", + "DEVTOOLS_WEBIDE_IMPORT_PROJECT_PER_USER_FLAG", + "DEVTOOLS_WEBIDE_LOCAL_CONNECTION_RESULT", + "DEVTOOLS_WEBIDE_NEW_PROJECT_BOOLEAN", + "DEVTOOLS_WEBIDE_NEW_PROJECT_PER_USER_FLAG", + "DEVTOOLS_WEBIDE_OPENED_BOOLEAN", + "DEVTOOLS_WEBIDE_OPENED_PER_USER_FLAG", + "DEVTOOLS_WEBIDE_OTHER_CONNECTION_RESULT", + "DEVTOOLS_WEBIDE_PROJECT_EDITOR_OPENED_BOOLEAN", + "DEVTOOLS_WEBIDE_PROJECT_EDITOR_OPENED_PER_USER_FLAG", + "DEVTOOLS_WEBIDE_PROJECT_EDITOR_SAVE_BOOLEAN", + "DEVTOOLS_WEBIDE_PROJECT_EDITOR_SAVE_PER_USER_FLAG", + "DEVTOOLS_WEBIDE_PROJECT_EDITOR_TIME_ACTIVE_SECONDS", + "DEVTOOLS_WEBIDE_REMOTE_CONNECTION_RESULT", + "DEVTOOLS_WEBIDE_SIMULATOR_CONNECTION_RESULT", + "DEVTOOLS_WEBIDE_TIME_ACTIVE_SECONDS", + "DEVTOOLS_WEBIDE_USB_CONNECTION_RESULT", + "DEVTOOLS_WEBIDE_WIFI_CONNECTION_RESULT", + "DISK_CACHE_CORRUPT_DETAILS", + "DISK_CACHE_INVALIDATION_SUCCESS", + "DISK_CACHE_REDUCTION_TRIAL", + "DISK_CACHE_REVALIDATION_SAFE", + "DISK_CACHE_REVALIDATION_SUCCESS", + "DISK_CACHE_SMART_SIZE_USING_OLD_MAX", + "DISPLAY_SCALING_LINUX", + "DISPLAY_SCALING_MSWIN", + "DISPLAY_SCALING_OSX", + "DNS_BLACKLIST_COUNT", + "DNS_CLEANUP_AGE", + "DNS_FAILED_LOOKUP_TIME", + "DNS_LOOKUP_METHOD2", + "DNS_LOOKUP_TIME", + "DNS_RENEWAL_TIME", + "DNS_RENEWAL_TIME_FOR_TTL", + "DNT_USAGE", + "DOM_RANGE_DETACHED", + "DOM_TIMERS_FIRED_PER_NATIVE_TIMEOUT", + "DOM_TIMERS_RECENTLY_SET", + "DOM_WINDOW_SHOWMODALDIALOG_USED", + "DWRITEFONT_DELAYEDINITFONTLIST_COLLECT", + "DWRITEFONT_DELAYEDINITFONTLIST_COUNT", + "DWRITEFONT_DELAYEDINITFONTLIST_TOTAL", + "DWRITEFONT_INIT_PROBLEM", + "E10S_BLOCKED_FROM_RUNNING", + "E10S_STILL_ACCEPTED_FROM_PROMPT", + "E10S_WINDOW", + "ENABLE_PRIVILEGE_EVER_CALLED", + "FENNEC_DISTRIBUTION_CODE_CATEGORY", + "FENNEC_DISTRIBUTION_DOWNLOAD_TIME_MS", + "FENNEC_DISTRIBUTION_REFERRER_INVALID", + "FENNEC_GECKOAPP_STARTUP_ACTION", + "FENNEC_GLOBALHISTORY_ADD_MS", + "FENNEC_GLOBALHISTORY_UPDATE_MS", + "FENNEC_GLOBALHISTORY_VISITED_BUILD_MS", + "FENNEC_HOMEPANELS_CUSTOM", + "FENNEC_READING_LIST_COUNT", + "FENNEC_RESTORING_ACTIVITY", + "FENNEC_SEARCH_LOADER_TIME_MS", + "FENNEC_STARTUP_TIME_GECKOREADY", + "FENNEC_STARTUP_TIME_JAVAUI", + "FENNEC_SYNC11_MIGRATIONS_COMPLETED", + "FENNEC_SYNC11_MIGRATIONS_FAILED", + "FENNEC_SYNC11_MIGRATIONS_SUCCEEDED", + "FENNEC_SYNC11_MIGRATION_NOTIFICATIONS_OFFERED", + "FENNEC_SYNC11_MIGRATION_SENTINELS_SEEN", + "FENNEC_SYNC_NUMBER_OF_SYNCS_COMPLETED", + "FENNEC_SYNC_NUMBER_OF_SYNCS_FAILED", + "FENNEC_SYNC_NUMBER_OF_SYNCS_FAILED_BACKOFF", + "FENNEC_SYNC_NUMBER_OF_SYNCS_STARTED", + "FENNEC_TABQUEUE_ENABLED", + "FENNEC_TABQUEUE_PROMPT_ENABLE_NO", + "FENNEC_TABQUEUE_PROMPT_ENABLE_YES", + "FENNEC_TABQUEUE_QUEUESIZE", + "FENNEC_TOPSITES_LOADER_TIME_MS", + "FENNEC_WAS_KILLED", + "FETCH_IS_MAINTHREAD", + "FLASH_PLUGIN_AREA", + "FLASH_PLUGIN_HEIGHT", + "FLASH_PLUGIN_INSTANCES_ON_PAGE", + "FLASH_PLUGIN_STATES", + "FLASH_PLUGIN_WIDTH", + "FONTLIST_INITFACENAMELISTS", + "FONTLIST_INITOTHERFAMILYNAMES", + "FONT_CACHE_HIT", + "FORCED_DEVICE_RESET_REASON", + "FX_BOOKMARKS_TOOLBAR_INIT_MS", + "FX_BROWSER_FULLSCREEN_USED", + "FX_GESTURE_COMPRESS_SNAPSHOT_OF_PAGE", + "FX_GESTURE_INSTALL_SNAPSHOT_OF_PAGE", + "FX_GESTURE_TAKE_SNAPSHOT_OF_PAGE", + "FX_IDENTITY_POPUP_OPEN_MS", + "FX_MIGRATION_ENTRY_POINT", + "FX_MIGRATION_ERRORS", + "FX_MIGRATION_HOMEPAGE_IMPORTED", + "FX_MIGRATION_SOURCE_BROWSER", + "FX_MIGRATION_USAGE", + "FX_NEW_WINDOW_MS", + "FX_PAGE_LOAD_MS", + "FX_SESSION_RESTORE_DOM_STORAGE_SIZE_ESTIMATE_CHARS", + "FX_SESSION_RESTORE_NUMBER_OF_EAGER_TABS_RESTORED", + "FX_SESSION_RESTORE_NUMBER_OF_TABS_RESTORED", + "FX_SESSION_RESTORE_NUMBER_OF_WINDOWS_RESTORED", + "FX_TABLETMODE_PAGE_LOAD", + "FX_TAB_ANIM_ANY_FRAME_INTERVAL_MS", + "FX_TAB_ANIM_ANY_FRAME_PAINT_MS", + "FX_TAB_ANIM_OPEN_FRAME_INTERVAL_MS", + "FX_TAB_ANIM_OPEN_PREVIEW_FRAME_INTERVAL_MS", + "FX_TAB_CLICK_MS", + "FX_TAB_SWITCH_SPINNER_VISIBLE_MS", + "FX_TAB_SWITCH_TOTAL_E10S_MS", + "FX_TAB_SWITCH_TOTAL_MS", + "FX_THUMBNAILS_BG_CAPTURE_CANVAS_DRAW_TIME_MS", + "FX_THUMBNAILS_BG_CAPTURE_DONE_REASON_2", + "FX_THUMBNAILS_BG_CAPTURE_PAGE_LOAD_TIME_MS", + "FX_THUMBNAILS_BG_CAPTURE_QUEUE_TIME_MS", + "FX_THUMBNAILS_BG_CAPTURE_SERVICE_TIME_MS", + "FX_THUMBNAILS_BG_QUEUE_SIZE_ON_CAPTURE", + "FX_THUMBNAILS_CAPTURE_TIME_MS", + "FX_THUMBNAILS_HIT_OR_MISS", + "FX_THUMBNAILS_STORE_TIME_MS", + "FX_TOTAL_TOP_VISITS", + "FX_TOUCH_USED", + "GDI_INITFONTLIST_TOTAL", + "GEOLOCATION_ACCURACY_EXPONENTIAL", + "GEOLOCATION_ERROR", + "GEOLOCATION_GETCURRENTPOSITION_SECURE_ORIGIN", + "GEOLOCATION_OSX_SOURCE_IS_MLS", + "GEOLOCATION_REQUEST_GRANTED", + "GEOLOCATION_WATCHPOSITION_SECURE_ORIGIN", + "GEOLOCATION_WIN8_SOURCE_IS_MLS", + "GFX_CRASH", + "GRADIENT_DURATION", + "GRADIENT_RETENTION_TIME", + "HISTORY_LASTVISITED_TREE_QUERY_TIME_MS", + "HTML_BACKGROUND_REFLOW_MS_2", + "HTML_FOREGROUND_REFLOW_MS_2", + "HTTPCONNMGR_TOTAL_SPECULATIVE_CONN", + "HTTPCONNMGR_UNUSED_SPECULATIVE_CONN", + "HTTPCONNMGR_USED_SPECULATIVE_CONN", + "HTTP_AUTH_DIALOG_STATS", + "HTTP_CACHE_DISPOSITION_2", + "HTTP_CACHE_DISPOSITION_2_V2", + "HTTP_CACHE_ENTRY_ALIVE_TIME", + "HTTP_CACHE_ENTRY_RELOAD_TIME", + "HTTP_CACHE_ENTRY_REUSE_COUNT", + "HTTP_CACHE_MISS_HALFLIFE_EXPERIMENT_2", + "HTTP_CONNECTION_ENTRY_CACHE_HIT_1", + "HTTP_CONTENT_ENCODING", + "HTTP_DISK_CACHE_DISPOSITION_2", + "HTTP_DISK_CACHE_OVERHEAD", + "HTTP_KBREAD_PER_CONN", + "HTTP_MEMORY_CACHE_DISPOSITION_2", + "HTTP_OFFLINE_CACHE_DISPOSITION_2", + "HTTP_OFFLINE_CACHE_DOCUMENT_LOAD", + "HTTP_PAGELOAD_IS_SSL", + "HTTP_PAGE_CACHE_READ_TIME", + "HTTP_PAGE_CACHE_READ_TIME_V2", + "HTTP_PAGE_COMPLETE_LOAD", + "HTTP_PAGE_COMPLETE_LOAD_CACHED", + "HTTP_PAGE_COMPLETE_LOAD_CACHED_V2", + "HTTP_PAGE_COMPLETE_LOAD_NET", + "HTTP_PAGE_COMPLETE_LOAD_NET_V2", + "HTTP_PAGE_COMPLETE_LOAD_V2", + "HTTP_PAGE_DNS_ISSUE_TIME", + "HTTP_PAGE_DNS_LOOKUP_TIME", + "HTTP_PAGE_FIRST_SENT_TO_LAST_RECEIVED", + "HTTP_PAGE_OPEN_TO_FIRST_FROM_CACHE", + "HTTP_PAGE_OPEN_TO_FIRST_FROM_CACHE_V2", + "HTTP_PAGE_OPEN_TO_FIRST_RECEIVED", + "HTTP_PAGE_OPEN_TO_FIRST_SENT", + "HTTP_PAGE_REVALIDATION", + "HTTP_PAGE_TCP_CONNECTION", + "HTTP_PROXY_TYPE", + "HTTP_REQUEST_PER_CONN", + "HTTP_REQUEST_PER_PAGE", + "HTTP_REQUEST_PER_PAGE_FROM_CACHE", + "HTTP_RESPONSE_VERSION", + "HTTP_SAW_QUIC_ALT_PROTOCOL", + "HTTP_SCHEME_UPGRADE", + "HTTP_SUBITEM_FIRST_BYTE_LATENCY_TIME", + "HTTP_SUBITEM_OPEN_LATENCY_TIME", + "HTTP_SUB_CACHE_READ_TIME", + "HTTP_SUB_CACHE_READ_TIME_V2", + "HTTP_SUB_COMPLETE_LOAD", + "HTTP_SUB_COMPLETE_LOAD_CACHED", + "HTTP_SUB_COMPLETE_LOAD_CACHED_V2", + "HTTP_SUB_COMPLETE_LOAD_NET", + "HTTP_SUB_COMPLETE_LOAD_NET_V2", + "HTTP_SUB_COMPLETE_LOAD_V2", + "HTTP_SUB_DNS_ISSUE_TIME", + "HTTP_SUB_DNS_LOOKUP_TIME", + "HTTP_SUB_FIRST_SENT_TO_LAST_RECEIVED", + "HTTP_SUB_OPEN_TO_FIRST_FROM_CACHE", + "HTTP_SUB_OPEN_TO_FIRST_FROM_CACHE_V2", + "HTTP_SUB_OPEN_TO_FIRST_RECEIVED", + "HTTP_SUB_OPEN_TO_FIRST_SENT", + "HTTP_SUB_REVALIDATION", + "HTTP_SUB_TCP_CONNECTION", + "HTTP_TRANSACTION_IS_SSL", + "HTTP_TRANSACTION_USE_ALTSVC", + "HTTP_TRANSACTION_USE_ALTSVC_OE", + "IDLE_NOTIFY_BACK_LISTENERS", + "IDLE_NOTIFY_BACK_MS", + "IDLE_NOTIFY_IDLE_LISTENERS", + "IDLE_NOTIFY_IDLE_MS", + "IMAGE_DECODE_CHUNKS", + "IMAGE_DECODE_COUNT", + "IMAGE_DECODE_LATENCY_US", + "IMAGE_DECODE_ON_DRAW_LATENCY", + "IMAGE_DECODE_SPEED_GIF", + "IMAGE_DECODE_SPEED_JPEG", + "IMAGE_DECODE_SPEED_PNG", + "IMAGE_DECODE_TIME", + "IMAGE_MAX_DECODE_COUNT", + "INNERWINDOWS_WITH_MUTATION_LISTENERS", + "IPC_SAME_PROCESS_MESSAGE_COPY_OOM_KB", + "IPV4_AND_IPV6_ADDRESS_CONNECTIVITY", + "JS_TELEMETRY_ADDON_EXCEPTIONS", + "LINK_ICON_SIZES_ATTR_DIMENSION", + "LINK_ICON_SIZES_ATTR_USAGE", + "LOCALDOMSTORAGE_CLEAR_BLOCKING_MS", + "LOCALDOMSTORAGE_GETALLKEYS_BLOCKING_MS", + "LOCALDOMSTORAGE_GETKEY_BLOCKING_MS", + "LOCALDOMSTORAGE_GETLENGTH_BLOCKING_MS", + "LOCALDOMSTORAGE_GETVALUE_BLOCKING_MS", + "LOCALDOMSTORAGE_INIT_DATABASE_MS", + "LOCALDOMSTORAGE_KEY_SIZE_BYTES", + "LOCALDOMSTORAGE_PRELOAD_PENDING_ON_FIRST_ACCESS", + "LOCALDOMSTORAGE_REMOVEKEY_BLOCKING_MS", + "LOCALDOMSTORAGE_SESSIONONLY_PRELOAD_BLOCKING_MS", + "LOCALDOMSTORAGE_SETVALUE_BLOCKING_MS", + "LOCALDOMSTORAGE_SHUTDOWN_DATABASE_MS", + "LOCALDOMSTORAGE_UNLOAD_BLOCKING_MS", + "LOCALDOMSTORAGE_VALUE_SIZE_BYTES", + "LONG_REFLOW_INTERRUPTIBLE", + "LOOP_AUDIO_QUALITY_INBOUND_BANDWIDTH_KBITS", + "LOOP_AUDIO_QUALITY_OUTBOUND_BANDWIDTH_KBITS", + "LOOP_AUDIO_QUALITY_OUTBOUND_RTT", + "LOOP_CALL_DURATION", + "LOOP_CALL_TYPE", + "LOOP_CLIENT_CALL_URL_REQUESTS_SUCCESS", + "LOOP_CLIENT_CALL_URL_SHARED", + "LOOP_DATACHANNEL_NEGOTIATED", + "LOOP_GET_USER_MEDIA_TYPE", + "LOOP_ICE_ADD_CANDIDATE_ERRORS_GIVEN_FAILURE", + "LOOP_ICE_ADD_CANDIDATE_ERRORS_GIVEN_SUCCESS", + "LOOP_ICE_FAILURE_TIME", + "LOOP_ICE_FINAL_CONNECTION_STATE", + "LOOP_ICE_LATE_TRICKLE_ARRIVAL_TIME", + "LOOP_ICE_ON_TIME_TRICKLE_ARRIVAL_TIME", + "LOOP_ICE_SUCCESS_RATE", + "LOOP_ICE_SUCCESS_TIME", + "LOOP_MAX_AUDIO_RECEIVE_TRACK", + "LOOP_MAX_AUDIO_SEND_TRACK", + "LOOP_MAX_VIDEO_RECEIVE_TRACK", + "LOOP_MAX_VIDEO_SEND_TRACK", + "LOOP_RENEGOTIATIONS", + "LOOP_VIDEO_DECODER_BITRATE_AVG_PER_CALL_KBPS", + "LOOP_VIDEO_DECODER_BITRATE_STD_DEV_PER_CALL_KBPS", + "LOOP_VIDEO_DECODER_DISCARDED_PACKETS_PER_CALL_PPM", + "LOOP_VIDEO_DECODER_FRAMERATE_10X_STD_DEV_PER_CALL", + "LOOP_VIDEO_DECODER_FRAMERATE_AVG_PER_CALL", + "LOOP_VIDEO_DECODE_ERROR_TIME_PERMILLE", + "LOOP_VIDEO_ENCODER_BITRATE_AVG_PER_CALL_KBPS", + "LOOP_VIDEO_ENCODER_BITRATE_STD_DEV_PER_CALL_KBPS", + "LOOP_VIDEO_ENCODER_DROPPED_FRAMES_PER_CALL_FPM", + "LOOP_VIDEO_ENCODER_FRAMERATE_10X_STD_DEV_PER_CALL", + "LOOP_VIDEO_ENCODER_FRAMERATE_AVG_PER_CALL", + "LOOP_VIDEO_ERROR_RECOVERY_MS", + "LOOP_VIDEO_QUALITY_INBOUND_BANDWIDTH_KBITS", + "LOOP_VIDEO_QUALITY_OUTBOUND_BANDWIDTH_KBITS", + "LOOP_VIDEO_QUALITY_OUTBOUND_RTT", + "LOOP_VIDEO_RECOVERY_AFTER_ERROR_PER_MIN", + "LOOP_VIDEO_RECOVERY_BEFORE_ERROR_PER_MIN", + "MAC_INITFONTLIST_TOTAL", + "MASTER_PASSWORD_ENABLED", + "MEDIA_WMF_DECODE_ERROR", + "MIXED_CONTENT_PAGE_LOAD", + "MIXED_CONTENT_UNBLOCK_COUNTER", + "MOZ_SQLITE_COOKIES_OPEN_READAHEAD_MS", + "MOZ_SQLITE_COOKIES_READ_B", + "MOZ_SQLITE_COOKIES_READ_MAIN_THREAD_MS", + "MOZ_SQLITE_COOKIES_READ_MS", + "MOZ_SQLITE_COOKIES_SYNC_MAIN_THREAD_MS", + "MOZ_SQLITE_COOKIES_SYNC_MS", + "MOZ_SQLITE_COOKIES_WRITE_B", + "MOZ_SQLITE_COOKIES_WRITE_MAIN_THREAD_MS", + "MOZ_SQLITE_COOKIES_WRITE_MS", + "MOZ_SQLITE_OPEN_MAIN_THREAD_MS", + "MOZ_SQLITE_OPEN_MS", + "MOZ_SQLITE_OTHER_READ_B", + "MOZ_SQLITE_OTHER_READ_MAIN_THREAD_MS", + "MOZ_SQLITE_OTHER_READ_MS", + "MOZ_SQLITE_OTHER_SYNC_MAIN_THREAD_MS", + "MOZ_SQLITE_OTHER_SYNC_MS", + "MOZ_SQLITE_OTHER_WRITE_B", + "MOZ_SQLITE_OTHER_WRITE_MAIN_THREAD_MS", + "MOZ_SQLITE_OTHER_WRITE_MS", + "MOZ_SQLITE_PLACES_READ_B", + "MOZ_SQLITE_PLACES_READ_MAIN_THREAD_MS", + "MOZ_SQLITE_PLACES_READ_MS", + "MOZ_SQLITE_PLACES_SYNC_MAIN_THREAD_MS", + "MOZ_SQLITE_PLACES_SYNC_MS", + "MOZ_SQLITE_PLACES_WRITE_B", + "MOZ_SQLITE_PLACES_WRITE_MAIN_THREAD_MS", + "MOZ_SQLITE_PLACES_WRITE_MS", + "MOZ_SQLITE_TRUNCATE_MAIN_THREAD_MS", + "MOZ_SQLITE_TRUNCATE_MS", + "MOZ_SQLITE_WEBAPPS_READ_B", + "MOZ_SQLITE_WEBAPPS_READ_MAIN_THREAD_MS", + "MOZ_SQLITE_WEBAPPS_READ_MS", + "MOZ_SQLITE_WEBAPPS_SYNC_MAIN_THREAD_MS", + "MOZ_SQLITE_WEBAPPS_SYNC_MS", + "MOZ_SQLITE_WEBAPPS_WRITE_B", + "MOZ_SQLITE_WEBAPPS_WRITE_MAIN_THREAD_MS", + "MOZ_SQLITE_WEBAPPS_WRITE_MS", + "NETWORK_AUTODIAL", + "NETWORK_CACHE_FS_TYPE", + "NETWORK_CACHE_HASH_STATS", + "NETWORK_CACHE_HIT_MISS_STAT_PER_CACHE_SIZE", + "NETWORK_CACHE_HIT_RATE_PER_CACHE_SIZE", + "NETWORK_CACHE_METADATA_FIRST_READ_SIZE", + "NETWORK_CACHE_METADATA_FIRST_READ_TIME_MS", + "NETWORK_CACHE_METADATA_SECOND_READ_TIME_MS", + "NETWORK_CACHE_METADATA_SIZE", + "NETWORK_CACHE_SIZE_FULL_FAT", + "NETWORK_CACHE_V1_HIT_TIME_MS", + "NETWORK_CACHE_V1_MISS_TIME_MS", + "NETWORK_CACHE_V1_TRUNCATE_TIME_MS", + "NETWORK_CACHE_V2_HIT_TIME_MS", + "NETWORK_CACHE_V2_INPUT_STREAM_STATUS", + "NETWORK_CACHE_V2_MISS_TIME_MS", + "NETWORK_CACHE_V2_OUTPUT_STREAM_STATUS", + "NETWORK_DISK_CACHE2_SHUTDOWN_CLEAR_PRIVATE", + "NETWORK_DISK_CACHE_DELETEDIR", + "NETWORK_DISK_CACHE_DELETEDIR_SHUTDOWN", + "NETWORK_DISK_CACHE_OPEN", + "NETWORK_DISK_CACHE_REVALIDATION", + "NETWORK_DISK_CACHE_SHUTDOWN", + "NETWORK_DISK_CACHE_SHUTDOWN_CLEAR_PRIVATE", + "NETWORK_DISK_CACHE_SHUTDOWN_V2", + "NETWORK_DISK_CACHE_STREAMIO_CLOSE", + "NETWORK_DISK_CACHE_STREAMIO_CLOSE_MAIN_THREAD", + "NETWORK_DISK_CACHE_TRASHRENAME", + "NEWTAB_PAGE_BLOCKED_SITES_COUNT", + "NEWTAB_PAGE_ENABLED", + "NEWTAB_PAGE_ENHANCED", + "NEWTAB_PAGE_LIFE_SPAN", + "NEWTAB_PAGE_LIFE_SPAN_SUGGESTED", + "NEWTAB_PAGE_PINNED_SITES_COUNT", + "NEWTAB_PAGE_SHOWN", + "NEWTAB_PAGE_SITE_CLICKED", + "NTLM_MODULE_USED_2", + "ONBEFOREUNLOAD_PROMPT_ACTION", + "ONBEFOREUNLOAD_PROMPT_COUNT", + "OSFILE_WORKER_LAUNCH_MS", + "OSFILE_WORKER_READY_MS", + "OSFILE_WRITEATOMIC_JANK_MS", + "PAGE_FAULTS_HARD", + "PAINT_BUILD_DISPLAYLIST_TIME", + "PAINT_RASTERIZE_TIME", + "PDF_VIEWER_DOCUMENT_GENERATOR", + "PDF_VIEWER_DOCUMENT_SIZE_KB", + "PDF_VIEWER_DOCUMENT_VERSION", + "PDF_VIEWER_EMBED", + "PDF_VIEWER_FALLBACK_SHOWN", + "PDF_VIEWER_FONT_TYPES", + "PDF_VIEWER_FORM", + "PDF_VIEWER_PRINT", + "PDF_VIEWER_STREAM_TYPES", + "PDF_VIEWER_TIME_TO_VIEW_MS", + "PDF_VIEWER_USED", + "PERF_MONITORING_SLOW_ADDON_CPOW_US", + "PERF_MONITORING_SLOW_ADDON_JANK_US", + "PERMISSIONS_SQL_CORRUPTED", + "PLACES_ANNOS_BOOKMARKS_COUNT", + "PLACES_ANNOS_PAGES_COUNT", + "PLACES_AUTOCOMPLETE_1ST_RESULT_TIME_MS", + "PLACES_AUTOCOMPLETE_6_FIRST_RESULTS_TIME_MS", + "PLACES_AUTOCOMPLETE_URLINLINE_DOMAIN_QUERY_TIME_MS", + "PLACES_BACKUPS_BOOKMARKSTREE_MS", + "PLACES_BACKUPS_DAYSFROMLAST", + "PLACES_BACKUPS_TOJSON_MS", + "PLACES_BOOKMARKS_COUNT", + "PLACES_DATABASE_FILESIZE_MB", + "PLACES_DATABASE_PAGESIZE_B", + "PLACES_DATABASE_SIZE_PER_PAGE_B", + "PLACES_EXPIRATION_STEPS_TO_CLEAN2", + "PLACES_EXPORT_TOHTML_MS", + "PLACES_FAVICON_BMP_SIZES", + "PLACES_FAVICON_GIF_SIZES", + "PLACES_FAVICON_ICO_SIZES", + "PLACES_FAVICON_JPEG_SIZES", + "PLACES_FAVICON_OTHER_SIZES", + "PLACES_FAVICON_PNG_SIZES", + "PLACES_FAVICON_SVG_SIZES", + "PLACES_HISTORY_LIBRARY_SEARCH_TIME_MS", + "PLACES_IDLE_FRECENCY_DECAY_TIME_MS", + "PLACES_IDLE_MAINTENANCE_TIME_MS", + "PLACES_KEYWORDS_COUNT", + "PLACES_MAINTENANCE_DAYSFROMLAST", + "PLACES_PAGES_COUNT", + "PLACES_SORTED_BOOKMARKS_PERC", + "PLACES_TAGGED_BOOKMARKS_PERC", + "PLACES_TAGS_COUNT", + "PLUGINS_INFOBAR_ALLOW", + "PLUGINS_INFOBAR_BLOCK", + "PLUGINS_INFOBAR_SHOWN", + "PLUGINS_NOTIFICATION_PLUGIN_COUNT", + "PLUGINS_NOTIFICATION_SHOWN", + "PLUGINS_NOTIFICATION_USER_ACTION", + "PLUGIN_CALLED_DIRECTLY", + "PLUGIN_HANG_TIME", + "PLUGIN_HANG_UI_DONT_ASK", + "PLUGIN_HANG_UI_RESPONSE_TIME", + "PLUGIN_HANG_UI_USER_RESPONSE", + "PLUGIN_SHUTDOWN_MS", + "PLUGIN_STARTUP_MS", + "PRCLOSE_TCP_BLOCKING_TIME_CONNECTIVITY_CHANGE", + "PRCLOSE_TCP_BLOCKING_TIME_LINK_CHANGE", + "PRCLOSE_TCP_BLOCKING_TIME_NORMAL", + "PRCLOSE_TCP_BLOCKING_TIME_OFFLINE", + "PRCLOSE_TCP_BLOCKING_TIME_SHUTDOWN", + "PRCLOSE_UDP_BLOCKING_TIME_CONNECTIVITY_CHANGE", + "PRCLOSE_UDP_BLOCKING_TIME_LINK_CHANGE", + "PRCLOSE_UDP_BLOCKING_TIME_NORMAL", + "PRCLOSE_UDP_BLOCKING_TIME_OFFLINE", + "PRCLOSE_UDP_BLOCKING_TIME_SHUTDOWN", + "PRCONNECTCONTINUE_BLOCKING_TIME_CONNECTIVITY_CHANGE", + "PRCONNECTCONTINUE_BLOCKING_TIME_LINK_CHANGE", + "PRCONNECTCONTINUE_BLOCKING_TIME_NORMAL", + "PRCONNECTCONTINUE_BLOCKING_TIME_OFFLINE", + "PRCONNECTCONTINUE_BLOCKING_TIME_SHUTDOWN", + "PRCONNECT_BLOCKING_TIME_CONNECTIVITY_CHANGE", + "PRCONNECT_BLOCKING_TIME_LINK_CHANGE", + "PRCONNECT_BLOCKING_TIME_NORMAL", + "PRCONNECT_BLOCKING_TIME_OFFLINE", + "PRCONNECT_BLOCKING_TIME_SHUTDOWN", + "PREDICTOR_BASE_CONFIDENCE", + "PREDICTOR_CONFIDENCE", + "PREDICTOR_GLOBAL_DEGRADATION", + "PREDICTOR_LEARN_ATTEMPTS", + "PREDICTOR_LEARN_FULL_QUEUE", + "PREDICTOR_LEARN_WORK_TIME", + "PREDICTOR_PREDICTIONS_CALCULATED", + "PREDICTOR_PREDICT_ATTEMPTS", + "PREDICTOR_PREDICT_FULL_QUEUE", + "PREDICTOR_PREDICT_TIME_TO_ACTION", + "PREDICTOR_PREDICT_TIME_TO_INACTION", + "PREDICTOR_PREDICT_WORK_TIME", + "PREDICTOR_SUBRESOURCE_DEGRADATION", + "PREDICTOR_TOTAL_PRECONNECTS", + "PREDICTOR_TOTAL_PRECONNECTS_CREATED", + "PREDICTOR_TOTAL_PRECONNECTS_UNUSED", + "PREDICTOR_TOTAL_PRECONNECTS_USED", + "PREDICTOR_TOTAL_PREDICTIONS", + "PREDICTOR_TOTAL_PRERESOLVES", + "PREDICTOR_WAIT_TIME", + "PROCESS_CRASH_SUBMIT_ATTEMPT", + "PROCESS_CRASH_SUBMIT_SUCCESS", + "PWMGR_BLOCKLIST_NUM_SITES", + "PWMGR_FORM_ACTION_EFFECT", + "PWMGR_FORM_AUTOFILL_RESULT", + "PWMGR_LOGIN_LAST_USED_DAYS", + "PWMGR_LOGIN_PAGE_SAFETY", + "PWMGR_MANAGE_COPIED_PASSWORD", + "PWMGR_MANAGE_COPIED_USERNAME", + "PWMGR_MANAGE_DELETED", + "PWMGR_MANAGE_DELETED_ALL", + "PWMGR_MANAGE_OPENED", + "PWMGR_MANAGE_SORTED", + "PWMGR_MANAGE_VISIBILITY_TOGGLED", + "PWMGR_NUM_HTTPAUTH_PASSWORDS", + "PWMGR_NUM_PASSWORDS_PER_HOSTNAME", + "PWMGR_NUM_SAVED_PASSWORDS", + "PWMGR_PASSWORD_INPUT_IN_FORM", + "PWMGR_PROMPT_REMEMBER_ACTION", + "PWMGR_PROMPT_UPDATE_ACTION", + "PWMGR_SAVING_ENABLED", + "PWMGR_USERNAME_PRESENT", + "REFRESH_DRIVER_TICK", + "REQUESTS_OF_ORIGINAL_CONTENT", + "SAFE_MODE_USAGE", + "SEARCH_COUNTS", + "SEARCH_SERVICE_BUILD_CACHE_MS", + "SEARCH_SERVICE_INIT_MS", + "SECURITY_UI", + "SERVICE_WORKER_CONTROLLED_DOCUMENTS", + "SERVICE_WORKER_LIFE_TIME", + "SERVICE_WORKER_REGISTRATIONS", + "SERVICE_WORKER_REGISTRATION_LOADING", + "SERVICE_WORKER_REQUEST_PASSTHROUGH", + "SERVICE_WORKER_SPAWN_ATTEMPTS", + "SERVICE_WORKER_SPAWN_GETS_QUEUED", + "SERVICE_WORKER_UPDATED", + "SERVICE_WORKER_WAS_SPAWNED", + "SESSIONDOMSTORAGE_KEY_SIZE_BYTES", + "SESSIONDOMSTORAGE_VALUE_SIZE_BYTES", + "SHARED_WORKER_SPAWN_GETS_QUEUED", + "SHOULD_AUTO_DETECT_LANGUAGE", + "SHOULD_TRANSLATION_UI_APPEAR", + "SHUMWAY_ERROR", + "SHUMWAY_FALLBACK", + "SHUMWAY_FEATURE_USED", + "SHUMWAY_LOAD_RESOURCE_RESULT", + "SHUMWAY_PARSING_MS", + "SHUMWAY_SWF_AREA", + "SHUMWAY_SWF_AVM2", + "SHUMWAY_SWF_BANNER", + "SHUMWAY_SWF_FRAME_RATE", + "SHUMWAY_SWF_INDEX_ON_PAGE", + "SHUMWAY_SWF_SIZE_KB", + "SHUMWAY_SWF_VERSION", + "SHUMWAY_TIME_TO_VIEW_MS", + "SHUTDOWN_OK", + "SHUTDOWN_PHASE_DURATION_TICKS_PROFILE_BEFORE_CHANGE", + "SHUTDOWN_PHASE_DURATION_TICKS_PROFILE_CHANGE_TEARDOWN", + "SHUTDOWN_PHASE_DURATION_TICKS_QUIT_APPLICATION", + "SHUTDOWN_PHASE_DURATION_TICKS_XPCOM_WILL_SHUTDOWN", + "SLOW_ADDON_WARNING_RESPONSE_TIME", + "SLOW_ADDON_WARNING_STATES", + "SOCIAL_ENABLED_ON_SESSION", + "SOCIAL_PANEL_CLICKS", + "SOCIAL_SIDEBAR_OPEN_DURATION", + "SOCIAL_SIDEBAR_STATE", + "SOCIAL_TOOLBAR_BUTTONS", + "SPDY_CHUNK_RECVD", + "SPDY_GOAWAY_LOCAL", + "SPDY_GOAWAY_PEER", + "SPDY_KBREAD_PER_CONN", + "SPDY_NPN_CONNECT", + "SPDY_NPN_JOIN", + "SPDY_PARALLEL_STREAMS", + "SPDY_REQUEST_PER_CONN", + "SPDY_SERVER_INITIATED_STREAMS", + "SPDY_SETTINGS_CWND", + "SPDY_SETTINGS_DL_BW", + "SPDY_SETTINGS_IW", + "SPDY_SETTINGS_MAX_STREAMS", + "SPDY_SETTINGS_RETRANS", + "SPDY_SETTINGS_RTT", + "SPDY_SETTINGS_UL_BW", + "SPDY_SYN_RATIO", + "SPDY_SYN_REPLY_RATIO", + "SPDY_SYN_REPLY_SIZE", + "SPDY_SYN_SIZE", + "SPDY_VERSION2", + "SQLITEBRIDGE_PROVIDER_FORMS_LOCKED", + "SQLITEBRIDGE_PROVIDER_HOME_LOCKED", + "SQLITEBRIDGE_PROVIDER_PASSWORDS_LOCKED", + "SSL_AUTH_ALGORITHM_FULL", + "SSL_AUTH_DSA_KEY_SIZE_FULL", + "SSL_AUTH_ECDSA_CURVE_FULL", + "SSL_AUTH_RSA_KEY_SIZE_FULL", + "SSL_BYTES_BEFORE_CERT_CALLBACK", + "SSL_CERT_ERROR_OVERRIDES", + "SSL_CIPHER_SUITE_FULL", + "SSL_CIPHER_SUITE_RESUMED", + "SSL_FALLBACK_LIMIT_REACHED", + "SSL_HANDSHAKE_TYPE", + "SSL_HANDSHAKE_VERSION", + "SSL_INITIAL_FAILED_CERT_VALIDATION_TIME_MOZILLAPKIX", + "SSL_KEA_DHE_KEY_SIZE_FULL", + "SSL_KEA_ECDHE_CURVE_FULL", + "SSL_KEA_RSA_KEY_SIZE_FULL", + "SSL_KEY_EXCHANGE_ALGORITHM_FULL", + "SSL_KEY_EXCHANGE_ALGORITHM_RESUMED", + "SSL_NPN_TYPE", + "SSL_OCSP_MAY_FETCH", + "SSL_OCSP_STAPLING", + "SSL_REASONS_FOR_NOT_FALSE_STARTING", + "SSL_RESUMED_SESSION", + "SSL_SERVER_AUTH_EKU", + "SSL_SUCCESFUL_CERT_VALIDATION_TIME_MOZILLAPKIX", + "SSL_SYMMETRIC_CIPHER_FULL", + "SSL_SYMMETRIC_CIPHER_RESUMED", + "SSL_TIME_UNTIL_HANDSHAKE_FINISHED", + "SSL_TIME_UNTIL_READY", + "SSL_TLS10_INTOLERANCE_REASON_POST", + "SSL_TLS10_INTOLERANCE_REASON_PRE", + "SSL_TLS11_INTOLERANCE_REASON_POST", + "SSL_TLS11_INTOLERANCE_REASON_PRE", + "SSL_TLS12_INTOLERANCE_REASON_POST", + "SSL_TLS12_INTOLERANCE_REASON_PRE", + "SSL_VERSION_FALLBACK_INAPPROPRIATE", + "SSL_WEAK_CIPHERS_FALLBACK", + "STARTUP_CACHE_AGE_HOURS", + "STARTUP_CRASH_DETECTED", + "STARTUP_MEASUREMENT_ERRORS", + "STS_NUMBER_OF_ONSOCKETREADY_CALLS", + "STS_NUMBER_OF_PENDING_EVENTS", + "STS_NUMBER_OF_PENDING_EVENTS_IN_THE_LAST_CYCLE", + "STS_POLL_AND_EVENTS_CYCLE", + "STS_POLL_AND_EVENT_THE_LAST_CYCLE", + "STS_POLL_BLOCK_TIME", + "STS_POLL_CYCLE", + "STUMBLER_OBSERVATIONS_PER_DAY", + "STUMBLER_TIME_BETWEEN_RECEIVED_LOCATIONS_SEC", + "STUMBLER_TIME_BETWEEN_START_SEC", + "STUMBLER_TIME_BETWEEN_UPLOADS_SEC", + "STUMBLER_UPLOAD_BYTES", + "STUMBLER_UPLOAD_CELL_COUNT", + "STUMBLER_UPLOAD_OBSERVATION_COUNT", + "STUMBLER_UPLOAD_WIFI_AP_COUNT", + "STUMBLER_VOLUME_BYTES_UPLOADED_PER_SEC", + "SUBPROCESS_ABNORMAL_ABORT", + "SUBPROCESS_CRASHES_WITH_DUMP", + "SYSTEM_FONT_FALLBACK", + "SYSTEM_FONT_FALLBACK_FIRST", + "SYSTEM_FONT_FALLBACK_SCRIPT", + "TAB_SWITCH_CACHE_POSITION", + "TAP_TO_LOAD_ENABLED", + "TAP_TO_LOAD_IMAGE_SIZE", + "TELEMETRY_COMPRESS", + "TELEMETRY_PING", + "TELEMETRY_SEND", + "TELEMETRY_STRINGIFY", + "TELEMETRY_SUCCESS", + "TELEMETRY_TEST_COUNT", + "TELEMETRY_TEST_COUNT_INIT_NO_RECORD", + "TELEMETRY_TEST_EXPIRED", + "TELEMETRY_TEST_FLAG", + "TELEMETRY_TEST_KEYED_COUNT", + "TELEMETRY_TEST_KEYED_COUNT_INIT_NO_RECORD", + "TELEMETRY_TEST_KEYED_FLAG", + "TELEMETRY_TEST_KEYED_RELEASE_OPTIN", + "TELEMETRY_TEST_KEYED_RELEASE_OPTOUT", + "TELEMETRY_TEST_RELEASE_OPTIN", + "TELEMETRY_TEST_RELEASE_OPTOUT", + "THUNDERBIRD_CONVERSATIONS_TIME_TO_2ND_GLODA_QUERY_MS", + "THUNDERBIRD_GLODA_SIZE_MB", + "THUNDERBIRD_INDEXING_RATE_MSG_PER_S", + "TLS_ERROR_REPORT_UI", + "TOP_LEVEL_CONTENT_DOCUMENTS_DESTROYED", + "TOUCH_ENABLED_DEVICE", + "TRACKING_PROTECTION_ENABLED", + "TRACKING_PROTECTION_EVENTS", + "TRACKING_PROTECTION_PBM_DISABLED", + "TRACKING_PROTECTION_SHIELD", + "TRANSACTION_WAIT_TIME_HTTP", + "TRANSACTION_WAIT_TIME_HTTP_PIPELINES", + "TRANSACTION_WAIT_TIME_SPDY", + "TRANSLATED_CHARACTERS", + "TRANSLATED_PAGES", + "TRANSLATED_PAGES_BY_LANGUAGE", + "TRANSLATION_OPPORTUNITIES", + "TRANSLATION_OPPORTUNITIES_BY_LANGUAGE", + "URLCLASSIFIER_CL_CHECK_TIME", + "URLCLASSIFIER_CL_UPDATE_TIME", + "URLCLASSIFIER_LC_COMPLETIONS", + "URLCLASSIFIER_LC_PREFIXES", + "URLCLASSIFIER_LOOKUP_TIME", + "URLCLASSIFIER_PS_CONSTRUCT_TIME", + "URLCLASSIFIER_PS_FAILURE", + "URLCLASSIFIER_PS_FALLOCATE_TIME", + "URLCLASSIFIER_PS_FILELOAD_TIME", + "URL_PATH_CONTAINS_EXCLAMATION_DOUBLE_SLASH", + "URL_PATH_CONTAINS_EXCLAMATION_SLASH", + "URL_PATH_ENDS_IN_EXCLAMATION", + "USE_COUNTER2_DEPRECATED_AppCache_DOCUMENT", + "USE_COUNTER2_DEPRECATED_AppCache_PAGE", + "USE_COUNTER2_DEPRECATED_Components_DOCUMENT", + "USE_COUNTER2_DEPRECATED_Components_PAGE", + "USE_COUNTER2_DEPRECATED_CreateAttributeNS_DOCUMENT", + "USE_COUNTER2_DEPRECATED_CreateAttributeNS_PAGE", + "USE_COUNTER2_DEPRECATED_CreateAttribute_DOCUMENT", + "USE_COUNTER2_DEPRECATED_CreateAttribute_PAGE", + "USE_COUNTER2_DEPRECATED_DOMExceptionCode_DOCUMENT", + "USE_COUNTER2_DEPRECATED_DOMExceptionCode_PAGE", + "USE_COUNTER2_DEPRECATED_DataContainerEvent_DOCUMENT", + "USE_COUNTER2_DEPRECATED_DataContainerEvent_PAGE", + "USE_COUNTER2_DEPRECATED_EnablePrivilege_DOCUMENT", + "USE_COUNTER2_DEPRECATED_EnablePrivilege_PAGE", + "USE_COUNTER2_DEPRECATED_GetAttributeNodeNS_DOCUMENT", + "USE_COUNTER2_DEPRECATED_GetAttributeNodeNS_PAGE", + "USE_COUNTER2_DEPRECATED_GetAttributeNode_DOCUMENT", + "USE_COUNTER2_DEPRECATED_GetAttributeNode_PAGE", + "USE_COUNTER2_DEPRECATED_GetPreventDefault_DOCUMENT", + "USE_COUNTER2_DEPRECATED_GetPreventDefault_PAGE", + "USE_COUNTER2_DEPRECATED_GetSetUserData_DOCUMENT", + "USE_COUNTER2_DEPRECATED_GetSetUserData_PAGE", + "USE_COUNTER2_DEPRECATED_ImportXULIntoContent_DOCUMENT", + "USE_COUNTER2_DEPRECATED_ImportXULIntoContent_PAGE", + "USE_COUNTER2_DEPRECATED_LenientThis_DOCUMENT", + "USE_COUNTER2_DEPRECATED_LenientThis_PAGE", + "USE_COUNTER2_DEPRECATED_MozGetAsFile_DOCUMENT", + "USE_COUNTER2_DEPRECATED_MozGetAsFile_PAGE", + "USE_COUNTER2_DEPRECATED_MutationEvent_DOCUMENT", + "USE_COUNTER2_DEPRECATED_MutationEvent_PAGE", + "USE_COUNTER2_DEPRECATED_NavigatorGetUserMedia_DOCUMENT", + "USE_COUNTER2_DEPRECATED_NavigatorGetUserMedia_PAGE", + "USE_COUNTER2_DEPRECATED_NoExposedProps_DOCUMENT", + "USE_COUNTER2_DEPRECATED_NoExposedProps_PAGE", + "USE_COUNTER2_DEPRECATED_NodeIteratorDetach_DOCUMENT", + "USE_COUNTER2_DEPRECATED_NodeIteratorDetach_PAGE", + "USE_COUNTER2_DEPRECATED_NodeValue_DOCUMENT", + "USE_COUNTER2_DEPRECATED_NodeValue_PAGE", + "USE_COUNTER2_DEPRECATED_OwnerElement_DOCUMENT", + "USE_COUNTER2_DEPRECATED_OwnerElement_PAGE", + "USE_COUNTER2_DEPRECATED_PannerNodeDoppler_DOCUMENT", + "USE_COUNTER2_DEPRECATED_PannerNodeDoppler_PAGE", + "USE_COUNTER2_DEPRECATED_PrefixedFullscreenAPI_DOCUMENT", + "USE_COUNTER2_DEPRECATED_PrefixedFullscreenAPI_PAGE", + "USE_COUNTER2_DEPRECATED_PrefixedVisibilityAPI_DOCUMENT", + "USE_COUNTER2_DEPRECATED_PrefixedVisibilityAPI_PAGE", + "USE_COUNTER2_DEPRECATED_RemoveAttributeNode_DOCUMENT", + "USE_COUNTER2_DEPRECATED_RemoveAttributeNode_PAGE", + "USE_COUNTER2_DEPRECATED_SetAttributeNodeNS_DOCUMENT", + "USE_COUNTER2_DEPRECATED_SetAttributeNodeNS_PAGE", + "USE_COUNTER2_DEPRECATED_SetAttributeNode_DOCUMENT", + "USE_COUNTER2_DEPRECATED_SetAttributeNode_PAGE", + "USE_COUNTER2_DEPRECATED_ShowModalDialog_DOCUMENT", + "USE_COUNTER2_DEPRECATED_ShowModalDialog_PAGE", + "USE_COUNTER2_DEPRECATED_SyncXMLHttpRequest_DOCUMENT", + "USE_COUNTER2_DEPRECATED_SyncXMLHttpRequest_PAGE", + "USE_COUNTER2_DEPRECATED_TextContent_DOCUMENT", + "USE_COUNTER2_DEPRECATED_TextContent_PAGE", + "USE_COUNTER2_DEPRECATED_UseOfCaptureEvents_DOCUMENT", + "USE_COUNTER2_DEPRECATED_UseOfCaptureEvents_PAGE", + "USE_COUNTER2_DEPRECATED_UseOfDOM3LoadMethod_DOCUMENT", + "USE_COUNTER2_DEPRECATED_UseOfDOM3LoadMethod_PAGE", + "USE_COUNTER2_DEPRECATED_UseOfReleaseEvents_DOCUMENT", + "USE_COUNTER2_DEPRECATED_UseOfReleaseEvents_PAGE", + "USE_COUNTER2_DEPRECATED_WebrtcDeprecatedPrefix_DOCUMENT", + "USE_COUNTER2_DEPRECATED_WebrtcDeprecatedPrefix_PAGE", + "USE_COUNTER2_DEPRECATED_Window_Content_DOCUMENT", + "USE_COUNTER2_DEPRECATED_Window_Content_PAGE", + "USE_COUNTER2_DEPRECATED_Window_Controllers_DOCUMENT", + "USE_COUNTER2_DEPRECATED_Window_Controllers_PAGE", + "USE_COUNTER2_EXTERNAL_ADDSEARCHENGINE_DOCUMENT", + "USE_COUNTER2_EXTERNAL_ADDSEARCHENGINE_PAGE", + "USE_COUNTER2_PROPERTY_FILLOPACITY_DOCUMENT", + "USE_COUNTER2_PROPERTY_FILLOPACITY_PAGE", + "USE_COUNTER2_PROPERTY_FILL_DOCUMENT", + "USE_COUNTER2_PROPERTY_FILL_PAGE", + "USE_COUNTER2_PUSHMANAGER_SUBSCRIBE_DOCUMENT", + "USE_COUNTER2_PUSHMANAGER_SUBSCRIBE_PAGE", + "USE_COUNTER2_PUSHSUBSCRIPTION_UNSUBSCRIBE_DOCUMENT", + "USE_COUNTER2_PUSHSUBSCRIPTION_UNSUBSCRIBE_PAGE", + "USE_COUNTER2_SVGSVGELEMENT_CURRENTSCALE_getter_DOCUMENT", + "USE_COUNTER2_SVGSVGELEMENT_CURRENTSCALE_getter_PAGE", + "USE_COUNTER2_SVGSVGELEMENT_CURRENTSCALE_setter_DOCUMENT", + "USE_COUNTER2_SVGSVGELEMENT_CURRENTSCALE_setter_PAGE", + "USE_COUNTER2_SVGSVGELEMENT_GETELEMENTBYID_DOCUMENT", + "USE_COUNTER2_SVGSVGELEMENT_GETELEMENTBYID_PAGE", + "USE_COUNTER2_WINDOW_SIDEBAR_getter_DOCUMENT", + "USE_COUNTER2_WINDOW_SIDEBAR_getter_PAGE", + "USE_COUNTER2_WINDOW_SIDEBAR_setter_DOCUMENT", + "USE_COUNTER2_WINDOW_SIDEBAR_setter_PAGE", + "VIDEO_CANPLAYTYPE_H264_CONSTRAINT_SET_FLAG", + "VIDEO_CANPLAYTYPE_H264_LEVEL", + "VIDEO_CANPLAYTYPE_H264_PROFILE", + "VIDEO_DECODED_H264_SPS_CONSTRAINT_SET_FLAG", + "VIDEO_DECODED_H264_SPS_LEVEL", + "VIDEO_DECODED_H264_SPS_PROFILE", + "VIDEO_EME_PLAY_SUCCESS", + "VIDEO_H264_SPS_MAX_NUM_REF_FRAMES", + "VIDEO_MSE_BUFFERING_COUNT", + "VIDEO_MSE_JOIN_LATENCY_MS", + "VIDEO_MSE_PLAY_TIME_MS", + "VIDEO_MSE_UNLOAD_STATE", + "WEAVE_COMPLETE_SUCCESS_COUNT", + "WEAVE_CONFIGURED", + "WEAVE_CONFIGURED_MASTER_PASSWORD", + "WEAVE_START_COUNT", + "WEBCRYPTO_ALG", + "WEBCRYPTO_EXTRACTABLE_ENC", + "WEBCRYPTO_EXTRACTABLE_GENERATE", + "WEBCRYPTO_EXTRACTABLE_IMPORT", + "WEBCRYPTO_EXTRACTABLE_SIG", + "WEBCRYPTO_METHOD", + "WEBCRYPTO_RESOLVED", + "WEBRTC_AUDIO_QUALITY_INBOUND_BANDWIDTH_KBITS", + "WEBRTC_AUDIO_QUALITY_INBOUND_JITTER", + "WEBRTC_AUDIO_QUALITY_INBOUND_PACKETLOSS_RATE", + "WEBRTC_AUDIO_QUALITY_OUTBOUND_BANDWIDTH_KBITS", + "WEBRTC_AUDIO_QUALITY_OUTBOUND_JITTER", + "WEBRTC_AUDIO_QUALITY_OUTBOUND_PACKETLOSS_RATE", + "WEBRTC_AUDIO_QUALITY_OUTBOUND_RTT", + "WEBRTC_AVSYNC_WHEN_AUDIO_LAGS_VIDEO_MS", + "WEBRTC_AVSYNC_WHEN_VIDEO_LAGS_AUDIO_MS", + "WEBRTC_CALL_COUNT", + "WEBRTC_CALL_DURATION", + "WEBRTC_CALL_TYPE", + "WEBRTC_DATACHANNEL_NEGOTIATED", + "WEBRTC_GET_USER_MEDIA_TYPE", + "WEBRTC_LOAD_STATE_NORMAL", + "WEBRTC_LOAD_STATE_NORMAL_SHORT", + "WEBRTC_LOAD_STATE_RELAXED", + "WEBRTC_LOAD_STATE_RELAXED_SHORT", + "WEBRTC_LOAD_STATE_STRESSED", + "WEBRTC_LOAD_STATE_STRESSED_SHORT", + "WEBRTC_MAX_AUDIO_RECEIVE_TRACK", + "WEBRTC_MAX_AUDIO_SEND_TRACK", + "WEBRTC_MAX_VIDEO_RECEIVE_TRACK", + "WEBRTC_MAX_VIDEO_SEND_TRACK", + "WEBRTC_RENEGOTIATIONS", + "WEBRTC_VIDEO_DECODER_BITRATE_AVG_PER_CALL_KBPS", + "WEBRTC_VIDEO_DECODER_BITRATE_STD_DEV_PER_CALL_KBPS", + "WEBRTC_VIDEO_DECODER_DISCARDED_PACKETS_PER_CALL_PPM", + "WEBRTC_VIDEO_DECODER_FRAMERATE_10X_STD_DEV_PER_CALL", + "WEBRTC_VIDEO_DECODER_FRAMERATE_AVG_PER_CALL", + "WEBRTC_VIDEO_DECODE_ERROR_TIME_PERMILLE", + "WEBRTC_VIDEO_ENCODER_BITRATE_AVG_PER_CALL_KBPS", + "WEBRTC_VIDEO_ENCODER_BITRATE_STD_DEV_PER_CALL_KBPS", + "WEBRTC_VIDEO_ENCODER_DROPPED_FRAMES_PER_CALL_FPM", + "WEBRTC_VIDEO_ENCODER_FRAMERATE_10X_STD_DEV_PER_CALL", + "WEBRTC_VIDEO_ENCODER_FRAMERATE_AVG_PER_CALL", + "WEBRTC_VIDEO_ERROR_RECOVERY_MS", + "WEBRTC_VIDEO_QUALITY_INBOUND_BANDWIDTH_KBITS", + "WEBRTC_VIDEO_QUALITY_INBOUND_JITTER", + "WEBRTC_VIDEO_QUALITY_INBOUND_PACKETLOSS_RATE", + "WEBRTC_VIDEO_QUALITY_OUTBOUND_BANDWIDTH_KBITS", + "WEBRTC_VIDEO_QUALITY_OUTBOUND_JITTER", + "WEBRTC_VIDEO_QUALITY_OUTBOUND_PACKETLOSS_RATE", + "WEBRTC_VIDEO_QUALITY_OUTBOUND_RTT", + "WEBRTC_VIDEO_RECOVERY_AFTER_ERROR_PER_MIN", + "WEBRTC_VIDEO_RECOVERY_BEFORE_ERROR_PER_MIN", + "WEBSOCKETS_HANDSHAKE_TYPE", + "WORD_CACHE_HITS_CHROME", + "WORD_CACHE_HITS_CONTENT", + "WORD_CACHE_MISSES_CHROME", + "WORD_CACHE_MISSES_CONTENT", + "XMLHTTPREQUEST_ASYNC_OR_SYNC", + "XUL_BACKGROUND_REFLOW_MS", + "XUL_CACHE_DISABLED", + "XUL_FOREGROUND_REFLOW_MS", + "XUL_INITIAL_FRAME_CONSTRUCTION" + ], "bug_numbers": [ "A11Y_CONSUMERS", "A11Y_IATABLE_USAGE_FLAG", diff --git a/toolkit/components/telemetry/histogram_tools.py b/toolkit/components/telemetry/histogram_tools.py index f9d5452a45c8..d08c13d524f3 100644 --- a/toolkit/components/telemetry/histogram_tools.py +++ b/toolkit/components/telemetry/histogram_tools.py @@ -206,9 +206,11 @@ associated with the histogram. Returns None if no guarding is necessary.""" table_dispatch(definition['kind'], table, lambda allowed_keys: Histogram.check_keys(name, definition, allowed_keys)) - if ('alert_emails' in definition - and not isinstance(definition['alert_emails'], list)): - raise KeyError, 'alert_emails must be an array if present (in Histogram %s)' % name + if 'alert_emails' not in definition: + if whitelists is not None and name not in whitelists['alert_emails']: + raise KeyError, 'New histogram "%s" must have an alert_emails field.' % name + elif not isinstance(definition['alert_emails'], list): + raise KeyError, 'alert_emails must be an array (in histogram "%s")' % name Histogram.check_name(name) Histogram.check_field_types(name, definition) From 1a2184ee1319eee78e099e89d90da5c156fd6f22 Mon Sep 17 00:00:00 2001 From: Marco Bonardo Date: Fri, 26 Feb 2016 16:16:48 +0100 Subject: [PATCH 07/60] Bug 1251446 - Can't delete more than 300 items from history treeviews. r=trivial-typo-fix MozReview-Commit-ID: CoMlnL0Wwht --HG-- extra : rebase_source : f34984362c5bd2b9940a2241702168bd8c4abad5 extra : amend_source : a34e9cf5a878bc772c5b6decd40e8782d9024a57 --- browser/components/places/content/controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser/components/places/content/controller.js b/browser/components/places/content/controller.js index 2e8011afa3d9..0f722031f414 100644 --- a/browser/components/places/content/controller.js +++ b/browser/components/places/content/controller.js @@ -972,7 +972,7 @@ PlacesController.prototype = { PlacesUtils.bhistory.removePages(URIslice, URIslice.length); Services.tm.mainThread.dispatch(() => gen.next(), Ci.nsIThread.DISPATCH_NORMAL); - yield unefined; + yield undefined; } } let gen = pagesChunkGenerator(URIs); From 29d1c8882868038f9c6305929f6876083298b01d Mon Sep 17 00:00:00 2001 From: Luca Greco Date: Thu, 25 Feb 2016 18:13:59 +0100 Subject: [PATCH 08/60] Bug 1227462 - tabs.create and tabs.update should check URLs using checkLoadURL. r=kmag MozReview-Commit-ID: EKFRpoSuXrF --HG-- extra : rebase_source : e8016dae12cdf5f4b3a9c345ce0a45f51bba519f --- browser/components/extensions/ext-tabs.js | 31 ++++++++++++++----- .../components/extensions/ExtensionUtils.jsm | 3 ++ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/browser/components/extensions/ext-tabs.js b/browser/components/extensions/ext-tabs.js index d736a7bf4809..0974dfb7f518 100644 --- a/browser/components/extensions/ext-tabs.js +++ b/browser/components/extensions/ext-tabs.js @@ -397,16 +397,20 @@ extensions.registerSchemaAPI("tabs", null, (extension, context) => { }).api(), create: function(createProperties) { - return new Promise(resolve => { + return new Promise((resolve, reject) => { function createInWindow(window) { let url; + if (createProperties.url !== null) { url = context.uri.resolve(createProperties.url); - } else { - url = window.BROWSER_NEW_TAB_URL; + + if (!context.checkLoadURL(url, {dontReportErrors: true})) { + reject({message: `URL not allowed: ${url}`}); + return; + } } - let tab = window.gBrowser.addTab(url); + let tab = window.gBrowser.addTab(url || window.BROWSER_NEW_TAB_URL); let active = true; if (createProperties.active !== null) { @@ -460,10 +464,23 @@ extensions.registerSchemaAPI("tabs", null, (extension, context) => { update: function(tabId, updateProperties) { let tab = tabId !== null ? TabManager.getTab(tabId) : TabManager.activeTab; - let tabbrowser = tab.ownerDocument.defaultView.gBrowser; - if (updateProperties.url !== null) { - tab.linkedBrowser.loadURI(updateProperties.url); + + if (!tab) { + return Promise.reject({message: `No tab found with tabId: ${tabId}`}); } + + let tabbrowser = tab.ownerDocument.defaultView.gBrowser; + + if (updateProperties.url !== null) { + let url = context.uri.resolve(updateProperties.url); + + if (!context.checkLoadURL(url, {dontReportErrors: true})) { + return Promise.reject({message: `URL not allowed: ${url}`}); + } + + tab.linkedBrowser.loadURI(url); + } + if (updateProperties.active !== null) { if (updateProperties.active) { tabbrowser.selectedTab = tab; diff --git a/toolkit/components/extensions/ExtensionUtils.jsm b/toolkit/components/extensions/ExtensionUtils.jsm index 865a5b5619c7..dc890324d89b 100644 --- a/toolkit/components/extensions/ExtensionUtils.jsm +++ b/toolkit/components/extensions/ExtensionUtils.jsm @@ -150,6 +150,9 @@ class BaseContext { if (!options.allowInheritsPrincipal) { flags |= ssm.DISALLOW_INHERIT_PRINCIPAL; } + if (options.dontReportErrors) { + flags |= ssm.DONT_REPORT_ERRORS; + } try { ssm.checkLoadURIStrWithPrincipal(this.principal, url, flags); From 024940a6374444c26db9b4e4ae89dd5f09ef5eea Mon Sep 17 00:00:00 2001 From: Luca Greco Date: Thu, 25 Feb 2016 18:14:51 +0100 Subject: [PATCH 09/60] Bug 1227462 - Test tabs.create/update on allowed and disallowed URLs. r=kmag MozReview-Commit-ID: 2cZST9GwTaw --HG-- extra : rebase_source : 9030bc0ab686eb4dc86bf95436c2d0af3d2d63bb --- .../extensions/test/browser/browser.ini | 2 + .../browser_ext_tabs_create_invalid_url.js | 66 ++++++++++ .../browser/browser_ext_tabs_onUpdated.js | 4 +- .../browser/browser_ext_tabs_update_url.js | 120 ++++++++++++++++++ 4 files changed, 190 insertions(+), 2 deletions(-) create mode 100644 browser/components/extensions/test/browser/browser_ext_tabs_create_invalid_url.js create mode 100644 browser/components/extensions/test/browser/browser_ext_tabs_update_url.js diff --git a/browser/components/extensions/test/browser/browser.ini b/browser/components/extensions/test/browser/browser.ini index 3e1cd97c0688..9360d8fc2df6 100644 --- a/browser/components/extensions/test/browser/browser.ini +++ b/browser/components/extensions/test/browser/browser.ini @@ -33,8 +33,10 @@ support-files = [browser_ext_tabs_query.js] [browser_ext_tabs_getCurrent.js] [browser_ext_tabs_create.js] +[browser_ext_tabs_create_invalid_url.js] [browser_ext_tabs_duplicate.js] [browser_ext_tabs_update.js] +[browser_ext_tabs_update_url.js] [browser_ext_tabs_onUpdated.js] [browser_ext_tabs_sendMessage.js] [browser_ext_tabs_move.js] diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_create_invalid_url.js b/browser/components/extensions/test/browser/browser_ext_tabs_create_invalid_url.js new file mode 100644 index 000000000000..44c00997785a --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_tabs_create_invalid_url.js @@ -0,0 +1,66 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +function* testTabsCreateInvalidURL(tabsCreateURL) { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + "permissions": ["tabs"], + }, + + background: function() { + browser.test.sendMessage("ready"); + browser.test.onMessage.addListener((msg, tabsCreateURL) => { + browser.tabs.create({url: tabsCreateURL}, (tab) => { + browser.test.assertEq(undefined, tab, "on error tab should be undefined"); + browser.test.assertTrue(/URL not allowed/.test(browser.runtime.lastError.message), + "runtime.lastError should report the expected error message"); + + // Remove the opened tab is any. + if (tab) { + browser.tabs.remove(tab.id); + } + browser.test.sendMessage("done"); + }); + }); + }, + }); + + yield extension.startup(); + + yield extension.awaitMessage("ready"); + + info(`test tab.create on invalid URL "${tabsCreateURL}"`); + + extension.sendMessage("start", tabsCreateURL); + yield extension.awaitMessage("done"); + + yield extension.unload(); +} + +add_task(function* () { + info("Start testing tabs.create on invalid URLs"); + + let dataURLPage = `data:text/html, + + + + + + +

data url page

+ + `; + + let testCases = [ + {tabsCreateURL: "about:addons"}, + {tabsCreateURL: "javascript:console.log('tabs.update execute javascript')"}, + {tabsCreateURL: dataURLPage}, + ]; + + for (let {tabsCreateURL} of testCases) { + yield* testTabsCreateInvalidURL(tabsCreateURL); + } + + info("done"); +}); diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_onUpdated.js b/browser/components/extensions/test/browser/browser_ext_tabs_onUpdated.js index 13a5a7ddc430..9444fa8bb65c 100644 --- a/browser/components/extensions/test/browser/browser_ext_tabs_onUpdated.js +++ b/browser/components/extensions/test/browser/browser_ext_tabs_onUpdated.js @@ -159,7 +159,7 @@ add_task(function* test_url() { browser.test.assertEq(tabId, tab.id, "Check tab id"); browser.test.log("onUpdate: " + JSON.stringify(changeInfo)); if ("url" in changeInfo) { - browser.test.assertEq("about:preferences", changeInfo.url, + browser.test.assertEq("about:blank", changeInfo.url, "Check changeInfo.url"); browser.tabs.onUpdated.removeListener(onUpdated); // Remove created tab. @@ -168,7 +168,7 @@ add_task(function* test_url() { return; } }); - browser.tabs.update(tab.id, {url: "about:preferences"}); + browser.tabs.update(tab.id, {url: "about:blank"}); }); }); }); diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_update_url.js b/browser/components/extensions/test/browser/browser_ext_tabs_update_url.js new file mode 100644 index 000000000000..9c0244a0c78a --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_tabs_update_url.js @@ -0,0 +1,120 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +function* testTabsUpdateURL(existentTabURL, tabsUpdateURL, isErrorExpected) { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + "permissions": ["tabs"], + }, + + files: { + "tab.html": ` + + + + + + +

tab page

+ + + `.trim(), + }, + background: function() { + browser.test.sendMessage("ready", browser.runtime.getURL("tab.html")); + + browser.test.onMessage.addListener((msg, tabsUpdateURL, isErrorExpected) => { + let onTabsUpdated = (tab) => { + if (isErrorExpected) { + browser.test.fail(`tabs.update with URL ${tabsUpdateURL} should be rejected`); + } else { + browser.test.assertTrue(tab, "on success the tab should be defined"); + } + }; + + let onTabsUpdateError = (error) => { + if (!isErrorExpected) { + browser.test.fails(`tabs.update with URL ${tabsUpdateURL} should not be rejected`); + } else { + browser.test.assertTrue(/^URL not allowed/.test(error.message), + "tabs.update should be rejected with the expected error message"); + } + }; + + let onTabsUpdateDone = () => browser.test.sendMessage("done"); + + browser.tabs.query({lastFocusedWindow: true}, (tabs) => { + browser.tabs.update(tabs[1].id, {url: tabsUpdateURL}) + .then(onTabsUpdated, onTabsUpdateError) + .then(onTabsUpdateDone); + }); + }); + }, + }); + + yield extension.startup(); + + let mozExtTabURL = yield extension.awaitMessage("ready"); + + if (tabsUpdateURL == "self") { + tabsUpdateURL = mozExtTabURL; + } + + info(`tab.update URL "${tabsUpdateURL}" on tab with URL "${existentTabURL}"`); + + let tab1 = yield BrowserTestUtils.openNewForegroundTab(gBrowser, existentTabURL); + + extension.sendMessage("start", tabsUpdateURL, isErrorExpected); + yield extension.awaitMessage("done"); + + yield BrowserTestUtils.removeTab(tab1); + yield extension.unload(); +} + +add_task(function* () { + info("Start testing tabs.update on javascript URLs"); + + let dataURLPage = `data:text/html, + + + + + + +

data url page

+ + `; + + let checkList = [ + { + tabsUpdateURL: "http://example.net", + isErrorExpected: false, + }, + { + tabsUpdateURL: "self", + isErrorExpected: false, + }, + { + tabsUpdateURL: "about:addons", + isErrorExpected: true, + }, + { + tabsUpdateURL: "javascript:console.log('tabs.update execute javascript')", + isErrorExpected: true, + }, + { + tabsUpdateURL: dataURLPage, + isErrorExpected: true, + }, + ]; + + let testCases = checkList + .map((check) => Object.assign({}, check, {existentTabURL: "about:blank"})); + + for (let {existentTabURL, tabsUpdateURL, isErrorExpected} of testCases) { + yield* testTabsUpdateURL(existentTabURL, tabsUpdateURL, isErrorExpected); + } + + info("done"); +}); From 910b634658b67424ddcf6f7f88d9b67cddf91361 Mon Sep 17 00:00:00 2001 From: Andrew Swan Date: Wed, 24 Feb 2016 15:37:32 -0800 Subject: [PATCH 10/60] Bug 1246095 - Put explicit margins on "Some extensions could not be verified" button. r=mossop MozReview-Commit-ID: E2vWjrz3n4y --HG-- extra : transplant_source : _%F0%8DkB%FC%83%29%3A%CA%E54a%C7%08%95%AB%B9%00Q --- toolkit/mozapps/extensions/content/extensions.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/toolkit/mozapps/extensions/content/extensions.css b/toolkit/mozapps/extensions/content/extensions.css index 6224540cc482..b822524fd18f 100644 --- a/toolkit/mozapps/extensions/content/extensions.css +++ b/toolkit/mozapps/extensions/content/extensions.css @@ -131,6 +131,11 @@ setting[type="menulist"] { display: none; } +#show-disabled-unsigned-extensions .button-text { + -moz-margin-start: 3px !important; + -moz-margin-end: 2px !important; +} + #header-searching:not([active]) { visibility: hidden; } From 779b41d21fa9c19dd791df5781af6f2cf2ad0d21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexis=20M=C3=A9taireau?= Date: Wed, 24 Feb 2016 15:40:55 +0100 Subject: [PATCH 11/60] Bug 1250104 - Import the "jsesc" library for escaping JavaScript strings. r=rnewman --- .eslintignore | 3 + toolkit/modules/moz.build | 1 + toolkit/modules/tests/xpcshell/test_jsesc.js | 9 + toolkit/modules/tests/xpcshell/xpcshell.ini | 2 + toolkit/modules/third_party/jsesc/README | 10 + toolkit/modules/third_party/jsesc/fx-header | 26 ++ toolkit/modules/third_party/jsesc/jsesc.js | 299 +++++++++++++++++++ toolkit/modules/third_party/moz.build | 9 + 8 files changed, 359 insertions(+) create mode 100644 toolkit/modules/tests/xpcshell/test_jsesc.js create mode 100644 toolkit/modules/third_party/jsesc/README create mode 100644 toolkit/modules/third_party/jsesc/fx-header create mode 100644 toolkit/modules/third_party/jsesc/jsesc.js create mode 100644 toolkit/modules/third_party/moz.build diff --git a/.eslintignore b/.eslintignore index 278106bef173..c34a9fcf2642 100644 --- a/.eslintignore +++ b/.eslintignore @@ -197,3 +197,6 @@ toolkit/mozapps/downloads/nsHelperAppDlg.js toolkit/mozapps/extensions/internal/AddonConstants.jsm toolkit/mozapps/update/tests/data/xpcshellConstantsPP.js toolkit/webapps/** + +# Third party +toolkit/modules/third_party/** diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build index 349aa292b2fd..af0693ce61ba 100644 --- a/toolkit/modules/moz.build +++ b/toolkit/modules/moz.build @@ -79,6 +79,7 @@ EXTRA_JS_MODULES += [ 'SpatialNavigation.jsm', 'Sqlite.jsm', 'Task.jsm', + 'third_party', 'Timer.jsm', 'Troubleshoot.jsm', 'UpdateUtils.jsm', diff --git a/toolkit/modules/tests/xpcshell/test_jsesc.js b/toolkit/modules/tests/xpcshell/test_jsesc.js new file mode 100644 index 000000000000..0c6cbba690c2 --- /dev/null +++ b/toolkit/modules/tests/xpcshell/test_jsesc.js @@ -0,0 +1,9 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +Components.utils.import("resource://gre/modules/third_party/jsesc/jsesc.js"); + +function run_test() { + do_check_eq(jsesc("teééést", {lowercaseHex: true}), "te\\xe9\\xe9\\xe9st"); + do_check_eq(jsesc("teééést", {lowercaseHex: false}), "te\\xE9\\xE9\\xE9st"); +} diff --git a/toolkit/modules/tests/xpcshell/xpcshell.ini b/toolkit/modules/tests/xpcshell/xpcshell.ini index 66832dbbbeb5..fc7a7e7a98e5 100644 --- a/toolkit/modules/tests/xpcshell/xpcshell.ini +++ b/toolkit/modules/tests/xpcshell/xpcshell.ini @@ -21,6 +21,8 @@ skip-if = toolkit == 'android' skip-if = toolkit == 'android' [test_Http.js] skip-if = toolkit == 'android' +[test_jsesc.js] +skip-if = toolkit == 'android' [test_Log.js] skip-if = toolkit == 'android' [test_MatchPattern.js] diff --git a/toolkit/modules/third_party/jsesc/README b/toolkit/modules/third_party/jsesc/README new file mode 100644 index 000000000000..6665923c4200 --- /dev/null +++ b/toolkit/modules/third_party/jsesc/README @@ -0,0 +1,10 @@ +This code comes from an externally managed library, available at +. Bugs should be reported directly +upstream and integrated back here. + +In order to regenerate this file, you need to do the following: + + $ git clone git@github.com:mathiasbynens/jsesc.git && cd jsesc + $ grunt template + $ export MOZ_JSESC="../mozilla-central/toolkit/modules/third_party/jsesc" + $ cat $MOZ_JSESC/fx-header jsesc.js > $MOZ_JSESC/jsesc.js diff --git a/toolkit/modules/third_party/jsesc/fx-header b/toolkit/modules/third_party/jsesc/fx-header new file mode 100644 index 000000000000..fbac20f1c031 --- /dev/null +++ b/toolkit/modules/third_party/jsesc/fx-header @@ -0,0 +1,26 @@ +/* +DO NOT TOUCH THIS FILE DIRECTLY. See the README for instructions. + +Copyright Mathias Bynens + +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. +*/ + +this.EXPORTED_SYMBOLS = ["jsesc"]; diff --git a/toolkit/modules/third_party/jsesc/jsesc.js b/toolkit/modules/third_party/jsesc/jsesc.js new file mode 100644 index 000000000000..0145101d53d3 --- /dev/null +++ b/toolkit/modules/third_party/jsesc/jsesc.js @@ -0,0 +1,299 @@ +/* +DO NOT TOUCH THIS FILE DIRECTLY. See the README for instructions. + +Copyright Mathias Bynens + +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. +*/ + +this.EXPORTED_SYMBOLS = ["jsesc"]; +/*! https://mths.be/jsesc v1.0.0 by @mathias */ +;(function(root) { + + // Detect free variables `exports` + var freeExports = typeof exports == 'object' && exports; + + // Detect free variable `module` + var freeModule = typeof module == 'object' && module && + module.exports == freeExports && module; + + // Detect free variable `global`, from Node.js or Browserified code, + // and use it as `root` + var freeGlobal = typeof global == 'object' && global; + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + var object = {}; + var hasOwnProperty = object.hasOwnProperty; + var forOwn = function(object, callback) { + var key; + for (key in object) { + if (hasOwnProperty.call(object, key)) { + callback(key, object[key]); + } + } + }; + + var extend = function(destination, source) { + if (!source) { + return destination; + } + forOwn(source, function(key, value) { + destination[key] = value; + }); + return destination; + }; + + var forEach = function(array, callback) { + var length = array.length; + var index = -1; + while (++index < length) { + callback(array[index]); + } + }; + + var toString = object.toString; + var isArray = function(value) { + return toString.call(value) == '[object Array]'; + }; + var isObject = function(value) { + // This is a very simple check, but it’s good enough for what we need. + return toString.call(value) == '[object Object]'; + }; + var isString = function(value) { + return typeof value == 'string' || + toString.call(value) == '[object String]'; + }; + var isFunction = function(value) { + // In a perfect world, the `typeof` check would be sufficient. However, + // in Chrome 1–12, `typeof /x/ == 'object'`, and in IE 6–8 + // `typeof alert == 'object'` and similar for other host objects. + return typeof value == 'function' || + toString.call(value) == '[object Function]'; + }; + + /*--------------------------------------------------------------------------*/ + + // https://mathiasbynens.be/notes/javascript-escapes#single + var singleEscapes = { + '"': '\\"', + '\'': '\\\'', + '\\': '\\\\', + '\b': '\\b', + '\f': '\\f', + '\n': '\\n', + '\r': '\\r', + '\t': '\\t' + // `\v` is omitted intentionally, because in IE < 9, '\v' == 'v'. + // '\v': '\\x0B' + }; + var regexSingleEscape = /["'\\\b\f\n\r\t]/; + + var regexDigit = /[0-9]/; + var regexWhitelist = /[ !#-&\(-\[\]-~]/; + + var jsesc = function(argument, options) { + // Handle options + var defaults = { + 'escapeEverything': false, + 'quotes': 'single', + 'wrap': false, + 'es6': false, + 'json': false, + 'compact': true, + 'lowercaseHex': false, + 'indent': '\t', + '__indent__': '' + }; + var json = options && options.json; + if (json) { + defaults.quotes = 'double'; + defaults.wrap = true; + } + options = extend(defaults, options); + if (options.quotes != 'single' && options.quotes != 'double') { + options.quotes = 'single'; + } + var quote = options.quotes == 'double' ? '"' : '\''; + var compact = options.compact; + var indent = options.indent; + var oldIndent; + var newLine = compact ? '' : '\n'; + var result; + var isEmpty = true; + + if (json && argument && isFunction(argument.toJSON)) { + argument = argument.toJSON(); + } + + if (!isString(argument)) { + if (isArray(argument)) { + result = []; + options.wrap = true; + oldIndent = options.__indent__; + indent += oldIndent; + options.__indent__ = indent; + forEach(argument, function(value) { + isEmpty = false; + result.push( + (compact ? '' : indent) + + jsesc(value, options) + ); + }); + if (isEmpty) { + return '[]'; + } + return '[' + newLine + result.join(',' + newLine) + newLine + + (compact ? '' : oldIndent) + ']'; + } else if (!isObject(argument)) { + if (json) { + // For some values (e.g. `undefined`, `function` objects), + // `JSON.stringify(value)` returns `undefined` (which isn’t valid + // JSON) instead of `'null'`. + return JSON.stringify(argument) || 'null'; + } + return String(argument); + } else { // it’s an object + result = []; + options.wrap = true; + oldIndent = options.__indent__; + indent += oldIndent; + options.__indent__ = indent; + forOwn(argument, function(key, value) { + isEmpty = false; + result.push( + (compact ? '' : indent) + + jsesc(key, options) + ':' + + (compact ? '' : ' ') + + jsesc(value, options) + ); + }); + if (isEmpty) { + return '{}'; + } + return '{' + newLine + result.join(',' + newLine) + newLine + + (compact ? '' : oldIndent) + '}'; + } + } + + var string = argument; + // Loop over each code unit in the string and escape it + var index = -1; + var length = string.length; + var first; + var second; + var codePoint; + result = ''; + while (++index < length) { + var character = string.charAt(index); + if (options.es6) { + first = string.charCodeAt(index); + if ( // check if it’s the start of a surrogate pair + first >= 0xD800 && first <= 0xDBFF && // high surrogate + length > index + 1 // there is a next code unit + ) { + second = string.charCodeAt(index + 1); + if (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; + var hexadecimal = codePoint.toString(16); + if (!options.lowercaseHex) { + hexadecimal = hexadecimal.toUpperCase(); + } + result += '\\u{' + hexadecimal + '}'; + index++; + continue; + } + } + } + if (!options.escapeEverything) { + if (regexWhitelist.test(character)) { + // It’s a printable ASCII character that is not `"`, `'` or `\`, + // so don’t escape it. + result += character; + continue; + } + if (character == '"') { + result += quote == character ? '\\"' : character; + continue; + } + if (character == '\'') { + result += quote == character ? '\\\'' : character; + continue; + } + } + if ( + character == '\0' && + !json && + !regexDigit.test(string.charAt(index + 1)) + ) { + result += '\\0'; + continue; + } + if (regexSingleEscape.test(character)) { + // no need for a `hasOwnProperty` check here + result += singleEscapes[character]; + continue; + } + var charCode = character.charCodeAt(0); + var hexadecimal = charCode.toString(16); + if (!options.lowercaseHex) { + hexadecimal = hexadecimal.toUpperCase(); + } + var longhand = hexadecimal.length > 2 || json; + var escaped = '\\' + (longhand ? 'u' : 'x') + + ('0000' + hexadecimal).slice(longhand ? -4 : -2); + result += escaped; + continue; + } + if (options.wrap) { + result = quote + result + quote; + } + return result; + }; + + jsesc.version = '1.0.0'; + + /*--------------------------------------------------------------------------*/ + + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define(function() { + return jsesc; + }); + } else if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js or RingoJS v0.8.0+ + freeModule.exports = jsesc; + } else { // in Narwhal or RingoJS v0.7.0- + freeExports.jsesc = jsesc; + } + } else { // in Rhino or a web browser + root.jsesc = jsesc; + } + +}(this)); diff --git a/toolkit/modules/third_party/moz.build b/toolkit/modules/third_party/moz.build new file mode 100644 index 000000000000..008992797ff9 --- /dev/null +++ b/toolkit/modules/third_party/moz.build @@ -0,0 +1,9 @@ +# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# 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/. + +EXTRA_JS_MODULES.third_party = [ + 'jsesc/jsesc.js', +] From dfdd96a1106ae82a70b454ec254c296407645f07 Mon Sep 17 00:00:00 2001 From: Andrew Swan Date: Wed, 24 Feb 2016 14:48:35 -0800 Subject: [PATCH 12/60] Bug 1250880 - remove fat-fingered (and unneeded) css rule r=dtownsend MozReview-Commit-ID: 7W1vW82BB9l --HG-- extra : transplant_source : P%FE%87%078%A8%D7g%98_%22%87%CE%05%22m%EB%CD%28%10 --- toolkit/themes/shared/extensions/extensions.inc.css | 1 - 1 file changed, 1 deletion(-) diff --git a/toolkit/themes/shared/extensions/extensions.inc.css b/toolkit/themes/shared/extensions/extensions.inc.css index c3f60a4cb4f8..6f9617dff6cf 100644 --- a/toolkit/themes/shared/extensions/extensions.inc.css +++ b/toolkit/themes/shared/extensions/extensions.inc.css @@ -137,7 +137,6 @@ button.warning { list-style-image: url("chrome://mozapps/skin/extensions/alerticon-warning.svg"); - list-stye-position: inside; } From 3990036852367317178231b608b4fd88fac59493 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 26 Feb 2016 06:36:00 +0100 Subject: [PATCH 13/60] Bug 1250968 - Link to the correct partner repacks repository in the Telemetry docs. r=gfritzsche --- toolkit/components/telemetry/docs/environment.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/toolkit/components/telemetry/docs/environment.rst b/toolkit/components/telemetry/docs/environment.rst index a0f604602edd..7b87e8eb95fb 100644 --- a/toolkit/components/telemetry/docs/environment.rst +++ b/toolkit/components/telemetry/docs/environment.rst @@ -312,8 +312,8 @@ partner If the user is using a partner repack, this contains information identifying the repack being used, otherwise "partnerNames" will be an empty array and other entries will be null. The information may be missing when the profile just becomes available. In Firefox for desktop, the information along with other customizations defined in distribution.ini are processed later in the startup phase, and will be fully applied when "distribution-customization-complete" notification is sent. -Distributions are most reliably identified by the ``distributionId`` field. Most partner information can be found in the `partner repacks `_. -Important values include: +Distributions are most reliably identified by the ``distributionId`` field. Partner information can be found in the `partner repacks `_ (`the old one `_ is deprecated): it contains one private repository per partner. +Important values for ``distributionId`` include: - "MozillaOnline" for the Mozilla China repack. - "canonical", for the `Ubuntu Firefox repack `_. From 2c7534fa8e987d1a8a47951fcf47bfa4191e6440 Mon Sep 17 00:00:00 2001 From: Lin Clark Date: Thu, 25 Feb 2016 08:25:00 +0100 Subject: [PATCH 14/60] Bug 1249088 - Add eslint rules for React. r=pbrosset MozReview-Commit-ID: Ll933hB8a1n --- devtools/.eslintrc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/devtools/.eslintrc b/devtools/.eslintrc index 7921c03d2008..dd529669b36d 100644 --- a/devtools/.eslintrc +++ b/devtools/.eslintrc @@ -1,4 +1,7 @@ { + "plugins": [ + "react" + ], "globals": { "Cc": true, "Ci": true, @@ -30,6 +33,23 @@ "mozilla/reject-importGlobalProperties": 1, "mozilla/var-only-at-top-level": 1, + // Rules from the React plugin + "react/display-name": 1, + "react/no-danger": 1, + "react/no-did-mount-set-state": 1, + "react/no-did-update-set-state": 1, + "react/no-direct-mutation-state": 1, + "react/no-unknown-property": 1, + "react/prefer-es6-class": 1, + "react/prop-types": 1, + "react/sort-comp": [1, { + order: [ + "propTypes", + "everything-else", + "render" + ] + }], + // Disallow using variables outside the blocks they are defined (especially // since only let and const are used, see "no-var"). "block-scoped-var": 2, From 7df79cb296ca5f1c7b48b89fc947c38221feebd9 Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Fri, 26 Feb 2016 10:58:42 -0500 Subject: [PATCH 15/60] Bug 1251620 - Update pdf.js to version 1.4.95. r=bdahl, r=Mossop --HG-- extra : rebase_source : 91cdfaccd2b4ff27abb3b38c7d9079393d4bf34c --- browser/extensions/pdfjs/README.mozilla | 2 +- .../pdfjs/content/PdfStreamConverter.jsm | 2 +- browser/extensions/pdfjs/content/build/pdf.js | 169 +++++++++++++++--- .../pdfjs/content/build/pdf.worker.js | 78 ++++++-- .../extensions/pdfjs/content/web/viewer.css | 3 +- .../extensions/pdfjs/content/web/viewer.js | 59 +++--- 6 files changed, 242 insertions(+), 71 deletions(-) diff --git a/browser/extensions/pdfjs/README.mozilla b/browser/extensions/pdfjs/README.mozilla index d1d4324efe6b..7ecf19d6f6d6 100644 --- a/browser/extensions/pdfjs/README.mozilla +++ b/browser/extensions/pdfjs/README.mozilla @@ -1,3 +1,3 @@ This is the pdf.js project output, https://github.com/mozilla/pdf.js -Current extension version is: 1.4.83 +Current extension version is: 1.4.95 diff --git a/browser/extensions/pdfjs/content/PdfStreamConverter.jsm b/browser/extensions/pdfjs/content/PdfStreamConverter.jsm index effb87320d7c..aed5f451d4f7 100644 --- a/browser/extensions/pdfjs/content/PdfStreamConverter.jsm +++ b/browser/extensions/pdfjs/content/PdfStreamConverter.jsm @@ -288,7 +288,7 @@ ChromeActions.prototype = { try { // contentDisposition/contentDispositionFilename is readonly before FF18 channel.contentDisposition = Ci.nsIChannel.DISPOSITION_ATTACHMENT; - if (self.contentDispositionFilename) { + if (self.contentDispositionFilename && !data.isAttachment) { channel.contentDispositionFilename = self.contentDispositionFilename; } else { channel.contentDispositionFilename = filename; diff --git a/browser/extensions/pdfjs/content/build/pdf.js b/browser/extensions/pdfjs/content/build/pdf.js index 7f0e420b50eb..6166536be679 100644 --- a/browser/extensions/pdfjs/content/build/pdf.js +++ b/browser/extensions/pdfjs/content/build/pdf.js @@ -28,8 +28,8 @@ factory((root.pdfjsDistBuildPdf = {})); // Use strict in our context only - users might not want it 'use strict'; -var pdfjsVersion = '1.4.83'; -var pdfjsBuild = '0629fd0'; +var pdfjsVersion = '1.4.95'; +var pdfjsBuild = '2b813c0'; var pdfjsFilePath = typeof document !== 'undefined' && document.currentScript ? @@ -407,6 +407,17 @@ var UNSUPPORTED_FEATURES = PDFJS.UNSUPPORTED_FEATURES = { font: 'font' }; +// Gets the file name from a given URL. +function getFilenameFromUrl(url) { + var anchor = url.indexOf('#'); + var query = url.indexOf('?'); + var end = Math.min( + anchor > 0 ? anchor : url.length, + query > 0 ? query : url.length); + return url.substring(url.lastIndexOf('/', end) + 1, end); +} +PDFJS.getFilenameFromUrl = getFilenameFromUrl; + // Combines two URLs. The baseUrl shall be absolute URL. If the url is an // absolute URL, it will be returned as is. function combineUrl(baseUrl, url) { @@ -1537,6 +1548,7 @@ exports.combineUrl = combineUrl; exports.createPromiseCapability = createPromiseCapability; exports.deprecated = deprecated; exports.error = error; +exports.getFilenameFromUrl = getFilenameFromUrl; exports.getLookupTableFactory = getLookupTableFactory; exports.info = info; exports.isArray = isArray; @@ -1577,6 +1589,7 @@ var AnnotationBorderStyleType = sharedUtil.AnnotationBorderStyleType; var AnnotationType = sharedUtil.AnnotationType; var Util = sharedUtil.Util; var addLinkAttributes = sharedUtil.addLinkAttributes; +var getFilenameFromUrl = sharedUtil.getFilenameFromUrl; var warn = sharedUtil.warn; var CustomStyle = displayDOMUtils.CustomStyle; @@ -1587,6 +1600,7 @@ var CustomStyle = displayDOMUtils.CustomStyle; * @property {PDFPage} page * @property {PageViewport} viewport * @property {IPDFLinkService} linkService + * @property {DownloadManager} downloadManager */ /** @@ -1628,6 +1642,9 @@ AnnotationElementFactory.prototype = case AnnotationType.STRIKEOUT: return new StrikeOutAnnotationElement(parameters); + case AnnotationType.FILEATTACHMENT: + return new FileAttachmentAnnotationElement(parameters); + default: return new AnnotationElement(parameters); } @@ -1646,6 +1663,7 @@ var AnnotationElement = (function AnnotationElementClosure() { this.page = parameters.page; this.viewport = parameters.viewport; this.linkService = parameters.linkService; + this.downloadManager = parameters.downloadManager; if (isRenderable) { this.container = this._createContainer(); @@ -1744,6 +1762,43 @@ var AnnotationElement = (function AnnotationElementClosure() { return container; }, + /** + * Create a popup for the annotation's HTML element. This is used for + * annotations that do not have a Popup entry in the dictionary, but + * are of a type that works with popups (such as Highlight annotations). + * + * @private + * @param {HTMLSectionElement} container + * @param {HTMLDivElement|HTMLImageElement|null} trigger + * @param {Object} data + * @memberof AnnotationElement + */ + _createPopup: + function AnnotationElement_createPopup(container, trigger, data) { + // If no trigger element is specified, create it. + if (!trigger) { + trigger = document.createElement('div'); + trigger.style.height = container.style.height; + trigger.style.width = container.style.width; + container.appendChild(trigger); + } + + var popupElement = new PopupElement({ + container: container, + trigger: trigger, + color: data.color, + title: data.title, + contents: data.contents, + hideWrapper: true + }); + var popup = popupElement.render(); + + // Position the popup next to the annotation's container. + popup.style.left = container.style.width; + + container.appendChild(popup); + }, + /** * Render the annotation's HTML element in the empty container. * @@ -1872,20 +1927,7 @@ var TextAnnotationElement = (function TextAnnotationElementClosure() { image.dataset.l10nArgs = JSON.stringify({type: this.data.name}); if (!this.data.hasPopup) { - var popupElement = new PopupElement({ - container: this.container, - trigger: image, - color: this.data.color, - title: this.data.title, - contents: this.data.contents, - hideWrapper: true - }); - var popup = popupElement.render(); - - // Position the popup next to the Text annotation's container. - popup.style.left = image.style.width; - - this.container.appendChild(popup); + this._createPopup(this.container, image, this.data); } this.container.appendChild(image); @@ -2162,7 +2204,9 @@ var PopupElement = (function PopupElementClosure() { var HighlightAnnotationElement = ( function HighlightAnnotationElementClosure() { function HighlightAnnotationElement(parameters) { - AnnotationElement.call(this, parameters, true); + var isRenderable = !!(parameters.data.hasPopup || + parameters.data.title || parameters.data.contents); + AnnotationElement.call(this, parameters, isRenderable); } Util.inherit(HighlightAnnotationElement, AnnotationElement, { @@ -2175,6 +2219,11 @@ var HighlightAnnotationElement = ( */ render: function HighlightAnnotationElement_render() { this.container.className = 'highlightAnnotation'; + + if (!this.data.hasPopup) { + this._createPopup(this.container, null, this.data); + } + return this.container; } }); @@ -2189,7 +2238,9 @@ var HighlightAnnotationElement = ( var UnderlineAnnotationElement = ( function UnderlineAnnotationElementClosure() { function UnderlineAnnotationElement(parameters) { - AnnotationElement.call(this, parameters, true); + var isRenderable = !!(parameters.data.hasPopup || + parameters.data.title || parameters.data.contents); + AnnotationElement.call(this, parameters, isRenderable); } Util.inherit(UnderlineAnnotationElement, AnnotationElement, { @@ -2202,6 +2253,11 @@ var UnderlineAnnotationElement = ( */ render: function UnderlineAnnotationElement_render() { this.container.className = 'underlineAnnotation'; + + if (!this.data.hasPopup) { + this._createPopup(this.container, null, this.data); + } + return this.container; } }); @@ -2215,7 +2271,9 @@ var UnderlineAnnotationElement = ( */ var SquigglyAnnotationElement = (function SquigglyAnnotationElementClosure() { function SquigglyAnnotationElement(parameters) { - AnnotationElement.call(this, parameters, true); + var isRenderable = !!(parameters.data.hasPopup || + parameters.data.title || parameters.data.contents); + AnnotationElement.call(this, parameters, isRenderable); } Util.inherit(SquigglyAnnotationElement, AnnotationElement, { @@ -2228,6 +2286,11 @@ var SquigglyAnnotationElement = (function SquigglyAnnotationElementClosure() { */ render: function SquigglyAnnotationElement_render() { this.container.className = 'squigglyAnnotation'; + + if (!this.data.hasPopup) { + this._createPopup(this.container, null, this.data); + } + return this.container; } }); @@ -2242,7 +2305,9 @@ var SquigglyAnnotationElement = (function SquigglyAnnotationElementClosure() { var StrikeOutAnnotationElement = ( function StrikeOutAnnotationElementClosure() { function StrikeOutAnnotationElement(parameters) { - AnnotationElement.call(this, parameters, true); + var isRenderable = !!(parameters.data.hasPopup || + parameters.data.title || parameters.data.contents); + AnnotationElement.call(this, parameters, isRenderable); } Util.inherit(StrikeOutAnnotationElement, AnnotationElement, { @@ -2255,6 +2320,11 @@ var StrikeOutAnnotationElement = ( */ render: function StrikeOutAnnotationElement_render() { this.container.className = 'strikeoutAnnotation'; + + if (!this.data.hasPopup) { + this._createPopup(this.container, null, this.data); + } + return this.container; } }); @@ -2262,6 +2332,62 @@ var StrikeOutAnnotationElement = ( return StrikeOutAnnotationElement; })(); +/** + * @class + * @alias FileAttachmentAnnotationElement + */ +var FileAttachmentAnnotationElement = ( + function FileAttachmentAnnotationElementClosure() { + function FileAttachmentAnnotationElement(parameters) { + AnnotationElement.call(this, parameters, true); + + this.filename = getFilenameFromUrl(parameters.data.file.filename); + this.content = parameters.data.file.content; + } + + Util.inherit(FileAttachmentAnnotationElement, AnnotationElement, { + /** + * Render the file attachment annotation's HTML element in the empty + * container. + * + * @public + * @memberof FileAttachmentAnnotationElement + * @returns {HTMLSectionElement} + */ + render: function FileAttachmentAnnotationElement_render() { + this.container.className = 'fileAttachmentAnnotation'; + + var trigger = document.createElement('div'); + trigger.style.height = this.container.style.height; + trigger.style.width = this.container.style.width; + trigger.addEventListener('dblclick', this._download.bind(this)); + + if (!this.data.hasPopup && (this.data.title || this.data.contents)) { + this._createPopup(this.container, trigger, this.data); + } + + this.container.appendChild(trigger); + return this.container; + }, + + /** + * Download the file attachment associated with this annotation. + * + * @private + * @memberof FileAttachmentAnnotationElement + */ + _download: function FileAttachmentAnnotationElement_download() { + if (!this.downloadManager) { + warn('Download cannot be started due to unavailable download manager'); + return; + } + this.downloadManager.downloadData(this.content, this.filename, ''); + } + }); + + return FileAttachmentAnnotationElement; +})(); + /** * @typedef {Object} AnnotationLayerParameters * @property {PageViewport} viewport @@ -2298,7 +2424,8 @@ var AnnotationLayer = (function AnnotationLayerClosure() { layer: parameters.div, page: parameters.page, viewport: parameters.viewport, - linkService: parameters.linkService + linkService: parameters.linkService, + downloadManager: parameters.downloadManager }; var element = annotationElementFactory.create(properties); if (element.isRenderable) { diff --git a/browser/extensions/pdfjs/content/build/pdf.worker.js b/browser/extensions/pdfjs/content/build/pdf.worker.js index e723aa7dfa84..246ba8261b62 100644 --- a/browser/extensions/pdfjs/content/build/pdf.worker.js +++ b/browser/extensions/pdfjs/content/build/pdf.worker.js @@ -28,8 +28,8 @@ factory((root.pdfjsDistBuildPdfWorker = {})); // Use strict in our context only - users might not want it 'use strict'; -var pdfjsVersion = '1.4.83'; -var pdfjsBuild = '0629fd0'; +var pdfjsVersion = '1.4.95'; +var pdfjsBuild = '2b813c0'; var pdfjsFilePath = typeof document !== 'undefined' && document.currentScript ? @@ -2366,6 +2366,17 @@ var UNSUPPORTED_FEATURES = PDFJS.UNSUPPORTED_FEATURES = { font: 'font' }; +// Gets the file name from a given URL. +function getFilenameFromUrl(url) { + var anchor = url.indexOf('#'); + var query = url.indexOf('?'); + var end = Math.min( + anchor > 0 ? anchor : url.length, + query > 0 ? query : url.length); + return url.substring(url.lastIndexOf('/', end) + 1, end); +} +PDFJS.getFilenameFromUrl = getFilenameFromUrl; + // Combines two URLs. The baseUrl shall be absolute URL. If the url is an // absolute URL, it will be returned as is. function combineUrl(baseUrl, url) { @@ -3496,6 +3507,7 @@ exports.combineUrl = combineUrl; exports.createPromiseCapability = createPromiseCapability; exports.deprecated = deprecated; exports.error = error; +exports.getFilenameFromUrl = getFilenameFromUrl; exports.getLookupTableFactory = getLookupTableFactory; exports.info = info; exports.isArray = isArray; @@ -34982,6 +34994,7 @@ var ObjectLoader = (function() { exports.Catalog = Catalog; exports.ObjectLoader = ObjectLoader; exports.XRef = XRef; +exports.FileSpec = FileSpec; })); @@ -38792,6 +38805,7 @@ var isName = corePrimitives.isName; var Stream = coreStream.Stream; var ColorSpace = coreColorSpace.ColorSpace; var ObjectLoader = coreObj.ObjectLoader; +var FileSpec = coreObj.FileSpec; var OperatorList = coreEvaluator.OperatorList; /** @@ -38817,6 +38831,7 @@ AnnotationFactory.prototype = /** @lends AnnotationFactory.prototype */ { // Return the right annotation object based on the subtype and field type. var parameters = { + xref: xref, dict: dict, ref: ref }; @@ -38850,6 +38865,9 @@ AnnotationFactory.prototype = /** @lends AnnotationFactory.prototype */ { case 'StrikeOut': return new StrikeOutAnnotation(parameters); + case 'FileAttachment': + return new FileAttachmentAnnotation(parameters); + default: warn('Unimplemented annotation type "' + subtype + '", ' + 'falling back to base annotation'); @@ -39083,6 +39101,24 @@ var Annotation = (function AnnotationClosure() { } }, + /** + * Prepare the annotation for working with a popup in the display layer. + * + * @private + * @memberof Annotation + * @param {Dict} dict - The annotation's data dictionary + */ + _preparePopup: function Annotation_preparePopup(dict) { + if (!dict.has('C')) { + // Fall back to the default background color. + this.data.color = null; + } + + this.data.hasPopup = dict.has('Popup'); + this.data.title = stringToPDFString(dict.get('T') || ''); + this.data.contents = stringToPDFString(dict.get('Contents') || ''); + }, + loadResources: function Annotation_loadResources(keys) { return new Promise(function (resolve, reject) { this.appearance.dict.getAsync('Resources').then(function (resources) { @@ -39400,27 +39436,15 @@ var TextAnnotation = (function TextAnnotationClosure() { this.data.annotationType = AnnotationType.TEXT; - var dict = parameters.dict; if (this.data.hasAppearance) { this.data.name = 'NoIcon'; } else { this.data.rect[1] = this.data.rect[3] - DEFAULT_ICON_SIZE; this.data.rect[2] = this.data.rect[0] + DEFAULT_ICON_SIZE; - this.data.name = dict.has('Name') ? dict.get('Name').name : 'Note'; - } - - if (!dict.has('C')) { - // Fall back to the default background color. - this.data.color = null; - } - - this.data.hasPopup = dict.has('Popup'); - if (!this.data.hasPopup) { - // There is no associated Popup annotation, so the Text annotation - // must create its own popup. - this.data.title = stringToPDFString(dict.get('T') || ''); - this.data.contents = stringToPDFString(dict.get('Contents') || ''); + this.data.name = parameters.dict.has('Name') ? + parameters.dict.get('Name').name : 'Note'; } + this._preparePopup(parameters.dict); } Util.inherit(TextAnnotation, Annotation, {}); @@ -39539,6 +39563,7 @@ var HighlightAnnotation = (function HighlightAnnotationClosure() { Annotation.call(this, parameters); this.data.annotationType = AnnotationType.HIGHLIGHT; + this._preparePopup(parameters.dict); // PDF viewers completely ignore any border styles. this.data.borderStyle.setWidth(0); @@ -39554,6 +39579,7 @@ var UnderlineAnnotation = (function UnderlineAnnotationClosure() { Annotation.call(this, parameters); this.data.annotationType = AnnotationType.UNDERLINE; + this._preparePopup(parameters.dict); // PDF viewers completely ignore any border styles. this.data.borderStyle.setWidth(0); @@ -39569,6 +39595,7 @@ var SquigglyAnnotation = (function SquigglyAnnotationClosure() { Annotation.call(this, parameters); this.data.annotationType = AnnotationType.SQUIGGLY; + this._preparePopup(parameters.dict); // PDF viewers completely ignore any border styles. this.data.borderStyle.setWidth(0); @@ -39584,6 +39611,7 @@ var StrikeOutAnnotation = (function StrikeOutAnnotationClosure() { Annotation.call(this, parameters); this.data.annotationType = AnnotationType.STRIKEOUT; + this._preparePopup(parameters.dict); // PDF viewers completely ignore any border styles. this.data.borderStyle.setWidth(0); @@ -39594,6 +39622,22 @@ var StrikeOutAnnotation = (function StrikeOutAnnotationClosure() { return StrikeOutAnnotation; })(); +var FileAttachmentAnnotation = (function FileAttachmentAnnotationClosure() { + function FileAttachmentAnnotation(parameters) { + Annotation.call(this, parameters); + + var file = new FileSpec(parameters.dict.get('FS'), parameters.xref); + + this.data.annotationType = AnnotationType.FILEATTACHMENT; + this.data.file = file.serializable; + this._preparePopup(parameters.dict); + } + + Util.inherit(FileAttachmentAnnotation, Annotation, {}); + + return FileAttachmentAnnotation; +})(); + exports.Annotation = Annotation; exports.AnnotationBorderStyle = AnnotationBorderStyle; exports.AnnotationFactory = AnnotationFactory; diff --git a/browser/extensions/pdfjs/content/web/viewer.css b/browser/extensions/pdfjs/content/web/viewer.css index 5efce997653f..3ce221cbac2f 100644 --- a/browser/extensions/pdfjs/content/web/viewer.css +++ b/browser/extensions/pdfjs/content/web/viewer.css @@ -132,7 +132,8 @@ .annotationLayer .highlightAnnotation, .annotationLayer .underlineAnnotation, .annotationLayer .squigglyAnnotation, -.annotationLayer .strikeoutAnnotation { +.annotationLayer .strikeoutAnnotation, +.annotationLayer .fileAttachmentAnnotation { cursor: pointer; } diff --git a/browser/extensions/pdfjs/content/web/viewer.js b/browser/extensions/pdfjs/content/web/viewer.js index bf9315de553d..11588c279dbc 100644 --- a/browser/extensions/pdfjs/content/web/viewer.js +++ b/browser/extensions/pdfjs/content/web/viewer.js @@ -12,15 +12,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* globals PDFJS, PDFBug, FirefoxCom, Stats, ProgressBar, - DownloadManager, getFileName, getPDFFileNameFromURL, - PDFHistory, Preferences, SidebarView, ViewHistory, Stats, - PDFThumbnailViewer, URL, noContextMenuHandler, SecondaryToolbar, - PasswordPrompt, PDFPresentationMode, PDFDocumentProperties, HandTool, - Promise, PDFLinkService, PDFOutlineView, PDFAttachmentView, - OverlayManager, PDFFindController, PDFFindBar, PDFViewer, - PDFRenderingQueue, PresentationModeState, parseQueryString, - RenderingStates, UNKNOWN_SCALE, DEFAULT_SCALE_VALUE, +/* globals PDFJS, PDFBug, FirefoxCom, Stats, ProgressBar, DownloadManager, + getPDFFileNameFromURL, PDFHistory, Preferences, SidebarView, + ViewHistory, Stats, PDFThumbnailViewer, URL, noContextMenuHandler, + SecondaryToolbar, PasswordPrompt, PDFPresentationMode, + PDFDocumentProperties, HandTool, Promise, PDFLinkService, + PDFOutlineView, PDFAttachmentView, OverlayManager, + PDFFindController, PDFFindBar, PDFViewer, PDFRenderingQueue, + PresentationModeState, parseQueryString, RenderingStates, + UNKNOWN_SCALE, DEFAULT_SCALE_VALUE, IGNORE_CURRENT_POSITION_ON_ZOOM: true */ 'use strict'; @@ -52,15 +52,6 @@ var MAX_AUTO_SCALE = 1.25; var SCROLLBAR_PADDING = 40; var VERTICAL_PADDING = 5; -function getFileName(url) { - var anchor = url.indexOf('#'); - var query = url.indexOf('?'); - var end = Math.min( - anchor > 0 ? anchor : url.length, - query > 0 ? query : url.length); - return url.substring(url.lastIndexOf('/', end) + 1, end); -} - /** * Returns scale factor for the canvas. It makes sense for the HiDPI displays. * @return {Object} The object with horizontal (sx) and vertical (sy) @@ -4299,6 +4290,7 @@ DefaultTextLayerFactory.prototype = { * @property {HTMLDivElement} pageDiv * @property {PDFPage} pdfPage * @property {IPDFLinkService} linkService + * @property {DownloadManager} downloadManager */ /** @@ -4313,6 +4305,7 @@ var AnnotationLayerBuilder = (function AnnotationLayerBuilderClosure() { this.pageDiv = options.pageDiv; this.pdfPage = options.pdfPage; this.linkService = options.linkService; + this.downloadManager = options.downloadManager; this.div = null; } @@ -4337,7 +4330,8 @@ var AnnotationLayerBuilder = (function AnnotationLayerBuilderClosure() { div: self.div, annotations: annotations, page: self.pdfPage, - linkService: self.linkService + linkService: self.linkService, + downloadManager: self.downloadManager }; if (self.div) { @@ -4401,6 +4395,8 @@ DefaultAnnotationLayerFactory.prototype = { * @property {HTMLDivElement} container - The container for the viewer element. * @property {HTMLDivElement} viewer - (optional) The viewer element. * @property {IPDFLinkService} linkService - The navigation/linking service. + * @property {DownloadManager} downloadManager - (optional) The download + * manager component. * @property {PDFRenderingQueue} renderingQueue - (optional) The rendering * queue object. * @property {boolean} removePageBorders - (optional) Removes the border shadow @@ -4453,6 +4449,7 @@ var PDFViewer = (function pdfViewer() { this.container = options.container; this.viewer = options.viewer || options.container.firstElementChild; this.linkService = options.linkService || new SimpleLinkService(); + this.downloadManager = options.downloadManager || null; this.removePageBorders = options.removePageBorders || false; this.defaultRenderingQueue = !options.renderingQueue; @@ -5118,7 +5115,8 @@ var PDFViewer = (function pdfViewer() { return new AnnotationLayerBuilder({ pageDiv: pageDiv, pdfPage: pdfPage, - linkService: this.linkService + linkService: this.linkService, + downloadManager: this.downloadManager }); }, @@ -5242,7 +5240,6 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() { this.linkService = linkService; this.renderingQueue = renderingQueue; - this.hasImage = false; this.resume = null; this.renderingState = RenderingStates.INITIAL; @@ -5298,7 +5295,6 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() { if (this.renderTask) { this.renderTask.cancel(); } - this.hasImage = false; this.resume = null; this.renderingState = RenderingStates.INITIAL; @@ -5401,11 +5397,9 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() { draw: function PDFThumbnailView_draw() { if (this.renderingState !== RenderingStates.INITIAL) { console.error('Must be in new state before drawing'); - } - if (this.hasImage) { return Promise.resolve(undefined); } - this.hasImage = true; + this.renderingState = RenderingStates.RUNNING; var resolveRenderPromise, rejectRenderPromise; @@ -5426,6 +5420,7 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() { rejectRenderPromise(error); return; } + self.renderingState = RenderingStates.FINISHED; self._convertCanvasToImage(); @@ -5469,14 +5464,17 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() { }, setImage: function PDFThumbnailView_setImage(pageView) { + if (this.renderingState !== RenderingStates.INITIAL) { + return; + } var img = pageView.canvas; - if (this.hasImage || !img) { + if (!img) { return; } if (!this.pdfPage) { this.setPdfPage(pageView.pdfPage); } - this.hasImage = true; + this.renderingState = RenderingStates.FINISHED; var ctx = this._getPageDrawContext(true); @@ -5927,7 +5925,7 @@ var PDFAttachmentView = (function PDFAttachmentViewClosure() { for (var i = 0; i < attachmentsCount; i++) { var item = attachments[names[i]]; - var filename = getFileName(item.filename); + var filename = PDFJS.getFilenameFromUrl(item.filename); var div = document.createElement('div'); div.className = 'attachmentsItem'; var button = document.createElement('button'); @@ -5993,7 +5991,8 @@ var PDFViewerApplication = { container: container, viewer: viewer, renderingQueue: pdfRenderingQueue, - linkService: pdfLinkService + linkService: pdfLinkService, + downloadManager: new DownloadManager() }); pdfRenderingQueue.setViewer(this.pdfViewer); pdfLinkService.setViewer(this.pdfViewer); @@ -6334,7 +6333,7 @@ var PDFViewerApplication = { setTitleUsingUrl: function pdfViewSetTitleUsingUrl(url) { this.url = url; try { - this.setTitle(decodeURIComponent(getFileName(url)) || url); + this.setTitle(decodeURIComponent(PDFJS.getFilenameFromUrl(url)) || url); } catch (e) { // decodeURIComponent may throw URIError, // fall back to using the unprocessed url in that case From 5630d1c2227947984a7ac948dc1d367b0736514f Mon Sep 17 00:00:00 2001 From: Andrzej Hunt Date: Thu, 25 Feb 2016 14:47:40 -0800 Subject: [PATCH 16/60] Bug 1240500 - Pre: whitespace cleanup and unnecessary comment cleanup r=me MozReview-Commit-ID: FDOsOUSitk4 --HG-- extra : rebase_source : 315cb89a66c74674b47da9e5e02fed7e53ce440a --- .../base/java/org/mozilla/gecko/home/SearchEngineRow.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mobile/android/base/java/org/mozilla/gecko/home/SearchEngineRow.java b/mobile/android/base/java/org/mozilla/gecko/home/SearchEngineRow.java index 3772b4e3a85e..6c636a6a0e4a 100644 --- a/mobile/android/base/java/org/mozilla/gecko/home/SearchEngineRow.java +++ b/mobile/android/base/java/org/mozilla/gecko/home/SearchEngineRow.java @@ -176,7 +176,6 @@ class SearchEngineRow extends AnimatedHeightLayout { while(indexOfMatch != -1) { indexOfMatch = string.indexOf(pattern, lastIndexOfMatch); lastIndexOfMatch = indexOfMatch + patternLength; - // Crash here? if(indexOfMatch != -1) { mOccurrences.add(indexOfMatch); } @@ -211,7 +210,7 @@ class SearchEngineRow extends AnimatedHeightLayout { int nextStartSpanIndex = 0; // Done to make sure that the stretch of text after the last occurrence, till the end of the suggestion, is made bold mOccurrences.add(suggestion.length()); - for(int occurrence : mOccurrences) { + for (int occurrence : mOccurrences) { // Even though they're the same style, SpannableStringBuilder will interpret there as being only one Span present if we re-use a StyleSpan StyleSpan boldSpan = new StyleSpan(Typeface.BOLD); sb.setSpan(boldSpan, nextStartSpanIndex, occurrence, Spannable.SPAN_INCLUSIVE_INCLUSIVE); From 56f1f6ecdb4830fd3c9d10287befc16005540a5e Mon Sep 17 00:00:00 2001 From: Andrzej Hunt Date: Thu, 25 Feb 2016 15:28:08 -0800 Subject: [PATCH 17/60] Bug 1240500 - Early return on empty pattern to avoid an infinte loop and OOM r=rnewman MozReview-Commit-ID: 7GlsZjfmE0y --HG-- extra : rebase_source : 66dd11d9079cebb5b798eef86361d43b1f955e98 --- .../java/org/mozilla/gecko/home/SearchEngineRow.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mobile/android/base/java/org/mozilla/gecko/home/SearchEngineRow.java b/mobile/android/base/java/org/mozilla/gecko/home/SearchEngineRow.java index 6c636a6a0e4a..543a5b3d3aa1 100644 --- a/mobile/android/base/java/org/mozilla/gecko/home/SearchEngineRow.java +++ b/mobile/android/base/java/org/mozilla/gecko/home/SearchEngineRow.java @@ -25,6 +25,7 @@ import android.content.SharedPreferences; import android.graphics.drawable.Drawable; import android.graphics.Typeface; import android.support.annotation.Nullable; +import android.text.TextUtils; import android.text.style.StyleSpan; import android.text.Spannable; import android.text.SpannableStringBuilder; @@ -170,7 +171,15 @@ class SearchEngineRow extends AnimatedHeightLayout { */ private void refreshOccurrencesWith(String pattern, String string) { mOccurrences.clear(); + + // Don't try to search for an empty string - String.indexOf will return 0, which would result + // in us iterating with lastIndexOfMatch = 0, which eventually results in an OOM. + if (TextUtils.isEmpty(pattern)) { + return; + } + final int patternLength = pattern.length(); + int indexOfMatch = 0; int lastIndexOfMatch = 0; while(indexOfMatch != -1) { From 1b2281147374fc7822b10e83bb7407be047275cc Mon Sep 17 00:00:00 2001 From: Wes Kocher Date: Fri, 26 Feb 2016 09:52:24 -0800 Subject: [PATCH 18/60] Backed out changeset 26bbd4cee816 (bug 1250104) because the test it added is failing MozReview-Commit-ID: 5RWr4L5CzV2 --- .eslintignore | 3 - toolkit/modules/moz.build | 1 - toolkit/modules/tests/xpcshell/test_jsesc.js | 9 - toolkit/modules/tests/xpcshell/xpcshell.ini | 2 - toolkit/modules/third_party/jsesc/README | 10 - toolkit/modules/third_party/jsesc/fx-header | 26 -- toolkit/modules/third_party/jsesc/jsesc.js | 299 ------------------- toolkit/modules/third_party/moz.build | 9 - 8 files changed, 359 deletions(-) delete mode 100644 toolkit/modules/tests/xpcshell/test_jsesc.js delete mode 100644 toolkit/modules/third_party/jsesc/README delete mode 100644 toolkit/modules/third_party/jsesc/fx-header delete mode 100644 toolkit/modules/third_party/jsesc/jsesc.js delete mode 100644 toolkit/modules/third_party/moz.build diff --git a/.eslintignore b/.eslintignore index c34a9fcf2642..278106bef173 100644 --- a/.eslintignore +++ b/.eslintignore @@ -197,6 +197,3 @@ toolkit/mozapps/downloads/nsHelperAppDlg.js toolkit/mozapps/extensions/internal/AddonConstants.jsm toolkit/mozapps/update/tests/data/xpcshellConstantsPP.js toolkit/webapps/** - -# Third party -toolkit/modules/third_party/** diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build index af0693ce61ba..349aa292b2fd 100644 --- a/toolkit/modules/moz.build +++ b/toolkit/modules/moz.build @@ -79,7 +79,6 @@ EXTRA_JS_MODULES += [ 'SpatialNavigation.jsm', 'Sqlite.jsm', 'Task.jsm', - 'third_party', 'Timer.jsm', 'Troubleshoot.jsm', 'UpdateUtils.jsm', diff --git a/toolkit/modules/tests/xpcshell/test_jsesc.js b/toolkit/modules/tests/xpcshell/test_jsesc.js deleted file mode 100644 index 0c6cbba690c2..000000000000 --- a/toolkit/modules/tests/xpcshell/test_jsesc.js +++ /dev/null @@ -1,9 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -Components.utils.import("resource://gre/modules/third_party/jsesc/jsesc.js"); - -function run_test() { - do_check_eq(jsesc("teééést", {lowercaseHex: true}), "te\\xe9\\xe9\\xe9st"); - do_check_eq(jsesc("teééést", {lowercaseHex: false}), "te\\xE9\\xE9\\xE9st"); -} diff --git a/toolkit/modules/tests/xpcshell/xpcshell.ini b/toolkit/modules/tests/xpcshell/xpcshell.ini index fc7a7e7a98e5..66832dbbbeb5 100644 --- a/toolkit/modules/tests/xpcshell/xpcshell.ini +++ b/toolkit/modules/tests/xpcshell/xpcshell.ini @@ -21,8 +21,6 @@ skip-if = toolkit == 'android' skip-if = toolkit == 'android' [test_Http.js] skip-if = toolkit == 'android' -[test_jsesc.js] -skip-if = toolkit == 'android' [test_Log.js] skip-if = toolkit == 'android' [test_MatchPattern.js] diff --git a/toolkit/modules/third_party/jsesc/README b/toolkit/modules/third_party/jsesc/README deleted file mode 100644 index 6665923c4200..000000000000 --- a/toolkit/modules/third_party/jsesc/README +++ /dev/null @@ -1,10 +0,0 @@ -This code comes from an externally managed library, available at -. Bugs should be reported directly -upstream and integrated back here. - -In order to regenerate this file, you need to do the following: - - $ git clone git@github.com:mathiasbynens/jsesc.git && cd jsesc - $ grunt template - $ export MOZ_JSESC="../mozilla-central/toolkit/modules/third_party/jsesc" - $ cat $MOZ_JSESC/fx-header jsesc.js > $MOZ_JSESC/jsesc.js diff --git a/toolkit/modules/third_party/jsesc/fx-header b/toolkit/modules/third_party/jsesc/fx-header deleted file mode 100644 index fbac20f1c031..000000000000 --- a/toolkit/modules/third_party/jsesc/fx-header +++ /dev/null @@ -1,26 +0,0 @@ -/* -DO NOT TOUCH THIS FILE DIRECTLY. See the README for instructions. - -Copyright Mathias Bynens - -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. -*/ - -this.EXPORTED_SYMBOLS = ["jsesc"]; diff --git a/toolkit/modules/third_party/jsesc/jsesc.js b/toolkit/modules/third_party/jsesc/jsesc.js deleted file mode 100644 index 0145101d53d3..000000000000 --- a/toolkit/modules/third_party/jsesc/jsesc.js +++ /dev/null @@ -1,299 +0,0 @@ -/* -DO NOT TOUCH THIS FILE DIRECTLY. See the README for instructions. - -Copyright Mathias Bynens - -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. -*/ - -this.EXPORTED_SYMBOLS = ["jsesc"]; -/*! https://mths.be/jsesc v1.0.0 by @mathias */ -;(function(root) { - - // Detect free variables `exports` - var freeExports = typeof exports == 'object' && exports; - - // Detect free variable `module` - var freeModule = typeof module == 'object' && module && - module.exports == freeExports && module; - - // Detect free variable `global`, from Node.js or Browserified code, - // and use it as `root` - var freeGlobal = typeof global == 'object' && global; - if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { - root = freeGlobal; - } - - /*--------------------------------------------------------------------------*/ - - var object = {}; - var hasOwnProperty = object.hasOwnProperty; - var forOwn = function(object, callback) { - var key; - for (key in object) { - if (hasOwnProperty.call(object, key)) { - callback(key, object[key]); - } - } - }; - - var extend = function(destination, source) { - if (!source) { - return destination; - } - forOwn(source, function(key, value) { - destination[key] = value; - }); - return destination; - }; - - var forEach = function(array, callback) { - var length = array.length; - var index = -1; - while (++index < length) { - callback(array[index]); - } - }; - - var toString = object.toString; - var isArray = function(value) { - return toString.call(value) == '[object Array]'; - }; - var isObject = function(value) { - // This is a very simple check, but it’s good enough for what we need. - return toString.call(value) == '[object Object]'; - }; - var isString = function(value) { - return typeof value == 'string' || - toString.call(value) == '[object String]'; - }; - var isFunction = function(value) { - // In a perfect world, the `typeof` check would be sufficient. However, - // in Chrome 1–12, `typeof /x/ == 'object'`, and in IE 6–8 - // `typeof alert == 'object'` and similar for other host objects. - return typeof value == 'function' || - toString.call(value) == '[object Function]'; - }; - - /*--------------------------------------------------------------------------*/ - - // https://mathiasbynens.be/notes/javascript-escapes#single - var singleEscapes = { - '"': '\\"', - '\'': '\\\'', - '\\': '\\\\', - '\b': '\\b', - '\f': '\\f', - '\n': '\\n', - '\r': '\\r', - '\t': '\\t' - // `\v` is omitted intentionally, because in IE < 9, '\v' == 'v'. - // '\v': '\\x0B' - }; - var regexSingleEscape = /["'\\\b\f\n\r\t]/; - - var regexDigit = /[0-9]/; - var regexWhitelist = /[ !#-&\(-\[\]-~]/; - - var jsesc = function(argument, options) { - // Handle options - var defaults = { - 'escapeEverything': false, - 'quotes': 'single', - 'wrap': false, - 'es6': false, - 'json': false, - 'compact': true, - 'lowercaseHex': false, - 'indent': '\t', - '__indent__': '' - }; - var json = options && options.json; - if (json) { - defaults.quotes = 'double'; - defaults.wrap = true; - } - options = extend(defaults, options); - if (options.quotes != 'single' && options.quotes != 'double') { - options.quotes = 'single'; - } - var quote = options.quotes == 'double' ? '"' : '\''; - var compact = options.compact; - var indent = options.indent; - var oldIndent; - var newLine = compact ? '' : '\n'; - var result; - var isEmpty = true; - - if (json && argument && isFunction(argument.toJSON)) { - argument = argument.toJSON(); - } - - if (!isString(argument)) { - if (isArray(argument)) { - result = []; - options.wrap = true; - oldIndent = options.__indent__; - indent += oldIndent; - options.__indent__ = indent; - forEach(argument, function(value) { - isEmpty = false; - result.push( - (compact ? '' : indent) + - jsesc(value, options) - ); - }); - if (isEmpty) { - return '[]'; - } - return '[' + newLine + result.join(',' + newLine) + newLine + - (compact ? '' : oldIndent) + ']'; - } else if (!isObject(argument)) { - if (json) { - // For some values (e.g. `undefined`, `function` objects), - // `JSON.stringify(value)` returns `undefined` (which isn’t valid - // JSON) instead of `'null'`. - return JSON.stringify(argument) || 'null'; - } - return String(argument); - } else { // it’s an object - result = []; - options.wrap = true; - oldIndent = options.__indent__; - indent += oldIndent; - options.__indent__ = indent; - forOwn(argument, function(key, value) { - isEmpty = false; - result.push( - (compact ? '' : indent) + - jsesc(key, options) + ':' + - (compact ? '' : ' ') + - jsesc(value, options) - ); - }); - if (isEmpty) { - return '{}'; - } - return '{' + newLine + result.join(',' + newLine) + newLine + - (compact ? '' : oldIndent) + '}'; - } - } - - var string = argument; - // Loop over each code unit in the string and escape it - var index = -1; - var length = string.length; - var first; - var second; - var codePoint; - result = ''; - while (++index < length) { - var character = string.charAt(index); - if (options.es6) { - first = string.charCodeAt(index); - if ( // check if it’s the start of a surrogate pair - first >= 0xD800 && first <= 0xDBFF && // high surrogate - length > index + 1 // there is a next code unit - ) { - second = string.charCodeAt(index + 1); - if (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate - // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae - codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; - var hexadecimal = codePoint.toString(16); - if (!options.lowercaseHex) { - hexadecimal = hexadecimal.toUpperCase(); - } - result += '\\u{' + hexadecimal + '}'; - index++; - continue; - } - } - } - if (!options.escapeEverything) { - if (regexWhitelist.test(character)) { - // It’s a printable ASCII character that is not `"`, `'` or `\`, - // so don’t escape it. - result += character; - continue; - } - if (character == '"') { - result += quote == character ? '\\"' : character; - continue; - } - if (character == '\'') { - result += quote == character ? '\\\'' : character; - continue; - } - } - if ( - character == '\0' && - !json && - !regexDigit.test(string.charAt(index + 1)) - ) { - result += '\\0'; - continue; - } - if (regexSingleEscape.test(character)) { - // no need for a `hasOwnProperty` check here - result += singleEscapes[character]; - continue; - } - var charCode = character.charCodeAt(0); - var hexadecimal = charCode.toString(16); - if (!options.lowercaseHex) { - hexadecimal = hexadecimal.toUpperCase(); - } - var longhand = hexadecimal.length > 2 || json; - var escaped = '\\' + (longhand ? 'u' : 'x') + - ('0000' + hexadecimal).slice(longhand ? -4 : -2); - result += escaped; - continue; - } - if (options.wrap) { - result = quote + result + quote; - } - return result; - }; - - jsesc.version = '1.0.0'; - - /*--------------------------------------------------------------------------*/ - - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define(function() { - return jsesc; - }); - } else if (freeExports && !freeExports.nodeType) { - if (freeModule) { // in Node.js or RingoJS v0.8.0+ - freeModule.exports = jsesc; - } else { // in Narwhal or RingoJS v0.7.0- - freeExports.jsesc = jsesc; - } - } else { // in Rhino or a web browser - root.jsesc = jsesc; - } - -}(this)); diff --git a/toolkit/modules/third_party/moz.build b/toolkit/modules/third_party/moz.build deleted file mode 100644 index 008992797ff9..000000000000 --- a/toolkit/modules/third_party/moz.build +++ /dev/null @@ -1,9 +0,0 @@ -# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# 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/. - -EXTRA_JS_MODULES.third_party = [ - 'jsesc/jsesc.js', -] From 7d984dcf6372a17270007d8fb05850dbeb86ea74 Mon Sep 17 00:00:00 2001 From: Michael Comella Date: Thu, 25 Feb 2016 12:49:45 -0800 Subject: [PATCH 19/60] Bug 1250707 - Create url annotations table. r=sebastian MozReview-Commit-ID: BHtwkdrpfYi --HG-- extra : rebase_source : f191d3687be00b6546b2fefa5b4f16b1f771ce32 --- .../org/mozilla/gecko/db/BrowserContract.java | 26 ++++++++++++++++ .../gecko/db/BrowserDatabaseHelper.java | 31 +++++++++++++++++-- 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/mobile/android/base/java/org/mozilla/gecko/db/BrowserContract.java b/mobile/android/base/java/org/mozilla/gecko/db/BrowserContract.java index f174c81bddb0..e6ae597b55e1 100644 --- a/mobile/android/base/java/org/mozilla/gecko/db/BrowserContract.java +++ b/mobile/android/base/java/org/mozilla/gecko/db/BrowserContract.java @@ -485,6 +485,32 @@ public class BrowserContract { public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "suggestedsites"); } + public static final class UrlAnnotations implements CommonColumns, DateSyncColumns { + private UrlAnnotations() {} + + public static final String TABLE_NAME = "urlannotations"; + + public static final String URL = "url"; + public static final String KEY = "key"; + public static final String VALUE = "value"; + public static final String SYNC_STATUS = "sync_status"; + + public enum SyncStatus { + // We use a parameter, rather than ordinal(), as defensive coding: we can't let the + // ordinal values change because we've already stored values into the DB. + NEW (0); + + // Value stored into the database for this column. + private final int dbValue; + + SyncStatus(final int dbValue) { + this.dbValue = dbValue; + } + + public int getDBValue() { return dbValue; } + } + } + // We refer to the service by name to decouple services from the rest of the code base. public static final String TAB_RECEIVED_SERVICE_CLASS_NAME = "org.mozilla.gecko.tabqueue.TabReceivedService"; diff --git a/mobile/android/base/java/org/mozilla/gecko/db/BrowserDatabaseHelper.java b/mobile/android/base/java/org/mozilla/gecko/db/BrowserDatabaseHelper.java index 85004224455b..8167ef800ce8 100644 --- a/mobile/android/base/java/org/mozilla/gecko/db/BrowserDatabaseHelper.java +++ b/mobile/android/base/java/org/mozilla/gecko/db/BrowserDatabaseHelper.java @@ -6,7 +6,6 @@ package org.mozilla.gecko.db; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -19,6 +18,7 @@ import org.mozilla.gecko.db.BrowserContract.History; import org.mozilla.gecko.db.BrowserContract.ReadingListItems; import org.mozilla.gecko.db.BrowserContract.SearchHistory; import org.mozilla.gecko.db.BrowserContract.Thumbnails; +import org.mozilla.gecko.db.BrowserContract.UrlAnnotations; import org.mozilla.gecko.util.FileUtils; import static org.mozilla.gecko.db.DBUtils.qualifyColumn; @@ -41,7 +41,7 @@ final class BrowserDatabaseHelper extends SQLiteOpenHelper { // Replace the Bug number below with your Bug that is conducting a DB upgrade, as to force a merge conflict with any // other patches that require a DB upgrade. - public static final int DATABASE_VERSION = 27; // Bug 826400 + public static final int DATABASE_VERSION = 28; // Bug 1250707 public static final String DATABASE_NAME = "browser.db"; final protected Context mContext; @@ -358,6 +358,7 @@ final class BrowserDatabaseHelper extends SQLiteOpenHelper { createReadingListTable(db, TABLE_READING_LIST); didCreateCurrentReadingListTable = true; // Mostly correct, in the absence of transactions. createReadingListIndices(db, TABLE_READING_LIST); + createUrlAnnotationsTable(db); } /** @@ -455,6 +456,23 @@ final class BrowserDatabaseHelper extends SQLiteOpenHelper { + ReadingListItems.CONTENT_STATUS + ")"); } + private void createUrlAnnotationsTable(final SQLiteDatabase db) { + debug("Creating " + UrlAnnotations.TABLE_NAME + " table"); + + db.execSQL("CREATE TABLE " + UrlAnnotations.TABLE_NAME + "(" + + UrlAnnotations._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + UrlAnnotations.URL + " TEXT NOT NULL, " + + UrlAnnotations.KEY + " TEXT NOT NULL, " + + UrlAnnotations.VALUE + " TEXT, " + + UrlAnnotations.DATE_CREATED + " INTEGER NOT NULL, " + + UrlAnnotations.DATE_MODIFIED + " INTEGER NOT NULL, " + + UrlAnnotations.SYNC_STATUS + " TINYINT NOT NULL DEFAULT " + UrlAnnotations.SyncStatus.NEW.getDBValue() + + " );"); + + db.execSQL("CREATE INDEX idx_url_annotations_url_key ON " + + UrlAnnotations.TABLE_NAME + "(" + UrlAnnotations.URL + ", " + UrlAnnotations.KEY + ")"); + } + private void createOrUpdateAllSpecialFolders(SQLiteDatabase db) { createOrUpdateSpecialFolder(db, Bookmarks.MOBILE_FOLDER_GUID, R.string.bookmarks_folder_mobile, 0); @@ -1032,6 +1050,11 @@ final class BrowserDatabaseHelper extends SQLiteOpenHelper { db.execSQL("DROP INDEX IF EXISTS favicons_url_index"); } + private void upgradeDatabaseFrom27to28(final SQLiteDatabase db) { + debug("Adding url annotations table"); + createUrlAnnotationsTable(db); + } + private void createV19CombinedView(SQLiteDatabase db) { db.execSQL("DROP VIEW IF EXISTS " + VIEW_COMBINED); db.execSQL("DROP VIEW IF EXISTS " + VIEW_COMBINED_WITH_FAVICONS); @@ -1115,6 +1138,10 @@ final class BrowserDatabaseHelper extends SQLiteOpenHelper { case 26: upgradeDatabaseFrom25to26(db); break; + + case 28: + upgradeDatabaseFrom27to28(db); + break; } } From 436b69233005cf387ceda3cfd7c89e9451c1f44c Mon Sep 17 00:00:00 2001 From: Michael Comella Date: Thu, 25 Feb 2016 13:00:26 -0800 Subject: [PATCH 20/60] Bug 1250707 - Add test for browser.db upgrades. r=sebastian Currently tests version 27 to 28 and is abstract enough to test future upgrades. Additionally, the test should fail if the database is upgraded but a database for the old version is not supplied. MozReview-Commit-ID: CpBiGETFacv --HG-- extra : rebase_source : 15b0970474da780b86cc7817b62023d3e95d6c58 --- .../gecko/db/BrowserDatabaseHelper.java | 3 +- .../robocop/assets/browser_db_upgrade/v27.db | Bin 0 -> 991232 bytes .../android/tests/browser/robocop/robocop.ini | 1 + .../testBrowserDatabaseHelperUpgrades.java | 130 ++++++++++++++++++ 4 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 mobile/android/tests/browser/robocop/assets/browser_db_upgrade/v27.db create mode 100644 mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testBrowserDatabaseHelperUpgrades.java diff --git a/mobile/android/base/java/org/mozilla/gecko/db/BrowserDatabaseHelper.java b/mobile/android/base/java/org/mozilla/gecko/db/BrowserDatabaseHelper.java index 8167ef800ce8..4421eb5ada9b 100644 --- a/mobile/android/base/java/org/mozilla/gecko/db/BrowserDatabaseHelper.java +++ b/mobile/android/base/java/org/mozilla/gecko/db/BrowserDatabaseHelper.java @@ -36,7 +36,8 @@ import android.os.Build; import android.util.Log; -final class BrowserDatabaseHelper extends SQLiteOpenHelper { +// public for robocop testing +public final class BrowserDatabaseHelper extends SQLiteOpenHelper { private static final String LOGTAG = "GeckoBrowserDBHelper"; // Replace the Bug number below with your Bug that is conducting a DB upgrade, as to force a merge conflict with any diff --git a/mobile/android/tests/browser/robocop/assets/browser_db_upgrade/v27.db b/mobile/android/tests/browser/robocop/assets/browser_db_upgrade/v27.db new file mode 100644 index 0000000000000000000000000000000000000000..089c30a1da2d0e2c3f221a4e2d8570d74154d13a GIT binary patch literal 991232 zcmeF42S5|c+OQK+sS5%IMIcl`2vwR&?@E&*V2dFM5GjEqND+hpD)z2`1uOQ74J-DB zVDAcwii(O@K@|R-6bK$Y_uP9u-*^A-PLwyZv+uq$^Gw;D$;@o{$Uu&OO^xI7k{JT3 z9Yz%+Cx>yTQZX0|g8scn|D>M*r~@xK&_}_0VpFKK*s>-P)<

=y~2DvB7CT$0(_#VKUJW5 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 z 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

KGsaG!_JBB9cSWDAJ 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

^+-M}+f7(~c$jCf^PA7|22V#Xvp|c|# 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�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

  • !p{0utt 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 + + diff --git a/devtools/server/actors/stylesheets.js b/devtools/server/actors/stylesheets.js index 0d3383bd7de1..49154dc0a3bd 100644 --- a/devtools/server/actors/stylesheets.js +++ b/devtools/server/actors/stylesheets.js @@ -734,13 +734,13 @@ var StyleSheetActor = protocol.ActorClass({ _fetchSourceMap: function() { let deferred = promise.defer(); - this._getText().then((content) => { - let url = this._extractSourceMapUrl(content); + this._getText().then(sheetContent => { + let url = this._extractSourceMapUrl(sheetContent); if (!url) { // no source map for this stylesheet deferred.resolve(null); return; - }; + } url = normalize(url, this.href); let options = { @@ -748,15 +748,24 @@ var StyleSheetActor = protocol.ActorClass({ policy: Ci.nsIContentPolicy.TYPE_INTERNAL_STYLESHEET, window: this.window }; - let map = fetch(url, options) - .then(({content}) => { - let map = new SourceMapConsumer(content); - this._setSourceMapRoot(map, url, this.href); - this._sourceMap = promise.resolve(map); - deferred.resolve(map); - return map; - }, deferred.reject); + let map = fetch(url, options).then(({content}) => { + // Fetching the source map might have failed with a 404 or other. When + // this happens, SourceMapConsumer may fail with a JSON.parse error. + let consumer; + try { + consumer = new SourceMapConsumer(content); + } catch (e) { + deferred.reject(new Error( + `Source map at ${url} not found or invalid`)); + return null; + } + this._setSourceMapRoot(consumer, url, this.href); + this._sourceMap = promise.resolve(consumer); + + deferred.resolve(consumer); + return consumer; + }, deferred.reject); this._sourceMap = map; }, deferred.reject); From 6cb725211141612b2ef008b6968b2fa02faadfe5 Mon Sep 17 00:00:00 2001 From: Patrick Brosset Date: Sat, 27 Feb 2016 21:03:23 +0100 Subject: [PATCH 45/60] Bug 1247263 - Round 2 of fixing unhandled rejected promises in ruleview tests; r=tromey MozReview-Commit-ID: 1sSlXBepsB0 --HG-- extra : rebase_source : 1d3d9690fd58fb6dcf64c11d24e9177f1dc34ee1 extra : histedit_source : 3e9bcf06d231a60d8c81fc2caf8f02733fb7d226%2C085361c13a6fd8dbd0bdf7bd201b2896b3179360 --- ...wser_rules_colorpicker-hides-on-tooltip.js | 9 +-- ...r_rules_completion-existing-property_02.js | 75 ++++++++++--------- ...rowser_rules_completion-new-property_02.js | 75 +++++++++---------- ...rowser_rules_completion-new-property_04.js | 15 ++-- .../browser_rules_edit-property-commit.js | 8 +- .../browser_rules_multiple_properties_02.js | 13 ++-- 6 files changed, 95 insertions(+), 100 deletions(-) diff --git a/devtools/client/inspector/rules/test/browser_rules_colorpicker-hides-on-tooltip.js b/devtools/client/inspector/rules/test/browser_rules_colorpicker-hides-on-tooltip.js index bf50837db0f3..f4845acfb635 100644 --- a/devtools/client/inspector/rules/test/browser_rules_colorpicker-hides-on-tooltip.js +++ b/devtools/client/inspector/rules/test/browser_rules_colorpicker-hides-on-tooltip.js @@ -25,10 +25,6 @@ add_task(function*() { let swatch = getRuleViewProperty(view, "body", "color").valueSpan .querySelector(".ruleview-colorswatch"); - yield testColorPickerHidesWhenImageTooltipAppears(view, swatch); -}); - -function* testColorPickerHidesWhenImageTooltipAppears(view, swatch) { let bgImageSpan = getRuleViewProperty(view, "body", "background-image") .valueSpan; let uriSpan = bgImageSpan.querySelector(".theme-link"); @@ -41,8 +37,11 @@ function* testColorPickerHidesWhenImageTooltipAppears(view, swatch) { info("Now showing the image preview tooltip to hide the color picker"); let onHidden = tooltip.once("hidden"); + // Hiding the color picker refreshes the value. + let onRuleViewChanged = view.once("ruleview-changed"); yield assertHoverTooltipOn(view.tooltips.previewTooltip, uriSpan); yield onHidden; + yield onRuleViewChanged; ok(true, "The color picker closed when the image preview tooltip appeared"); -} +}); diff --git a/devtools/client/inspector/rules/test/browser_rules_completion-existing-property_02.js b/devtools/client/inspector/rules/test/browser_rules_completion-existing-property_02.js index d025b449efde..e0e0add1fc85 100644 --- a/devtools/client/inspector/rules/test/browser_rules_completion-existing-property_02.js +++ b/devtools/client/inspector/rules/test/browser_rules_completion-existing-property_02.js @@ -13,27 +13,28 @@ // modifers, // expected input box value after keypress, // selectedIndex of the popup, -// total items in the popup +// total items in the popup, +// expect ruleview-changed // ] var testData = [ - ["b", {}, "beige", 0, 8], - ["l", {}, "black", 0, 4], - ["VK_DOWN", {}, "blanchedalmond", 1, 4], - ["VK_DOWN", {}, "blue", 2, 4], - ["VK_RIGHT", {}, "blue", -1, 0], - [" ", {}, "blue !important", 0, 10], - ["!", {}, "blue !important", 0, 0], - ["VK_BACK_SPACE", {}, "blue !", -1, 0], - ["VK_BACK_SPACE", {}, "blue ", -1, 0], - ["VK_BACK_SPACE", {}, "blue", -1, 0], - ["VK_TAB", {shiftKey: true}, "color", -1, 0], - ["VK_BACK_SPACE", {}, "", -1, 0], - ["d", {}, "direction", 0, 3], - ["i", {}, "direction", 0, 2], - ["s", {}, "display", -1, 0], - ["VK_TAB", {}, "blue", -1, 0], - ["n", {}, "none", -1, 0], - ["VK_RETURN", {}, null, -1, 0] + ["b", {}, "beige", 0, 8, true], + ["l", {}, "black", 0, 4, true], + ["VK_DOWN", {}, "blanchedalmond", 1, 4, true], + ["VK_DOWN", {}, "blue", 2, 4, true], + ["VK_RIGHT", {}, "blue", -1, 0, false], + [" ", {}, "blue !important", 0, 10, true], + ["!", {}, "blue !important", 0, 0, true], + ["VK_BACK_SPACE", {}, "blue !", -1, 0, true], + ["VK_BACK_SPACE", {}, "blue ", -1, 0, true], + ["VK_BACK_SPACE", {}, "blue", -1, 0, true], + ["VK_TAB", {shiftKey: true}, "color", -1, 0, true], + ["VK_BACK_SPACE", {}, "", -1, 0, false], + ["d", {}, "direction", 0, 3, false], + ["i", {}, "direction", 0, 2, false], + ["s", {}, "display", -1, 0, false], + ["VK_TAB", {}, "blue", -1, 0, true], + ["n", {}, "none", -1, 0, true], + ["VK_RETURN", {}, null, -1, 0, true] ]; const TEST_URI = "

    Header

    "; @@ -54,9 +55,11 @@ function* runAutocompletionTest(toolbox, inspector, view) { info("Selecting the test node"); yield selectNode("h1", inspector); + let rule = getRuleViewRuleEditor(view, 0).rule; + let prop = rule.textProps[0]; + info("Focusing the css property editable value"); - let value = view.styleDocument.querySelectorAll(".ruleview-propertyvalue")[0]; - let editor = yield focusEditableField(view, value); + let editor = yield focusEditableField(view, prop.editor.valueSpan); info("Starting to test for css property completion"); for (let i = 0; i < testData.length; i++) { @@ -67,30 +70,28 @@ function* runAutocompletionTest(toolbox, inspector, view) { } } -function* testCompletion([key, modifiers, completion, index, total], editor, - view) { +function* testCompletion([key, modifiers, completion, index, total, willChange], + editor, view) { info("Pressing key " + key); info("Expecting " + completion + ", " + index + ", " + total); - let onKeyPress; - - if (/tab/ig.test(key)) { - info("Waiting for the new property or value editor to get focused"); - let brace = view.styleDocument.querySelector(".ruleview-ruleclose"); - onKeyPress = once(brace.parentNode, "focus", true); - } else if (/(right|return|back_space)/ig.test(key)) { - info("Adding event listener for right|return|back_space keys"); - onKeyPress = once(editor.input, "keypress"); + let onDone; + if (willChange) { + // If the key triggers a ruleview-changed, wait for that event, it will + // always be the last to be triggered and tells us when the preview has + // been done. + onDone = view.once("ruleview-changed"); } else { - info("Waiting for after-suggest event on the editor"); - onKeyPress = editor.once("after-suggest"); + // Otherwise, expect an after-suggest event (except if the popup gets + // closed). + onDone = key !== "VK_RIGHT" && key !== "VK_BACK_SPACE" + ? editor.once("after-suggest") + : null; } info("Synthesizing key " + key + ", modifiers: " + Object.keys(modifiers)); EventUtils.synthesizeKey(key, modifiers, view.styleWindow); - - yield onKeyPress; - yield waitForTick(); + yield onDone; // The key might have been a TAB or shift-TAB, in which case the editor will // be a new one diff --git a/devtools/client/inspector/rules/test/browser_rules_completion-new-property_02.js b/devtools/client/inspector/rules/test/browser_rules_completion-new-property_02.js index 9f5176915a68..14fc9e429137 100644 --- a/devtools/client/inspector/rules/test/browser_rules_completion-new-property_02.js +++ b/devtools/client/inspector/rules/test/browser_rules_completion-new-property_02.js @@ -13,30 +13,30 @@ // modifers, // expected input box value after keypress, // selectedIndex of the popup, -// total items in the popup +// total items in the popup, +// expect ruleview-changed // ] var testData = [ - ["a", {accelKey: true, ctrlKey: true}, "", -1, 0], - ["d", {}, "direction", 0, 3], - ["VK_DOWN", {}, "display", 1, 3], - ["VK_TAB", {}, "", -1, 10], - ["VK_DOWN", {}, "-moz-box", 0, 10], - ["n", {}, "none", -1, 0], - ["VK_TAB", {shiftKey: true}, "display", -1, 0], - ["VK_BACK_SPACE", {}, "", -1, 0], - ["c", {}, "caption-side", 0, 10], - ["o", {}, "color", 0, 7], - ["VK_TAB", {}, "none", -1, 0], - ["r", {}, "rebeccapurple", 0, 6], - ["VK_DOWN", {}, "red", 1, 6], - ["VK_DOWN", {}, "rgb", 2, 6], - ["VK_DOWN", {}, "rgba", 3, 6], - ["VK_DOWN", {}, "rosybrown", 4, 6], - ["VK_DOWN", {}, "royalblue", 5, 6], - ["VK_RIGHT", {}, "royalblue", -1, 0], - [" ", {}, "royalblue !important", 0, 10], - ["!", {}, "royalblue !important", 0, 0], - ["VK_ESCAPE", {}, null, -1, 0] + ["d", {}, "direction", 0, 3, false], + ["VK_DOWN", {}, "display", 1, 3, false], + ["VK_TAB", {}, "", -1, 10, true], + ["VK_DOWN", {}, "-moz-box", 0, 10, true], + ["n", {}, "none", -1, 0, true], + ["VK_TAB", {shiftKey: true}, "display", -1, 0, true], + ["VK_BACK_SPACE", {}, "", -1, 0, false], + ["c", {}, "caption-side", 0, 10, false], + ["o", {}, "color", 0, 7, false], + ["VK_TAB", {}, "none", -1, 0, true], + ["r", {}, "rebeccapurple", 0, 6, true], + ["VK_DOWN", {}, "red", 1, 6, true], + ["VK_DOWN", {}, "rgb", 2, 6, true], + ["VK_DOWN", {}, "rgba", 3, 6, true], + ["VK_DOWN", {}, "rosybrown", 4, 6, true], + ["VK_DOWN", {}, "royalblue", 5, 6, true], + ["VK_RIGHT", {}, "royalblue", -1, 0, false], + [" ", {}, "royalblue !important", 0, 10, true], + ["!", {}, "royalblue !important", 0, 0, true], + ["VK_ESCAPE", {}, null, -1, 0, true] ]; const TEST_URI = ` @@ -77,31 +77,28 @@ function* runAutocompletionTest(toolbox, inspector, view) { } } -function* testCompletion([key, modifiers, completion, index, total], editor, - view) { +function* testCompletion([key, modifiers, completion, index, total, willChange], + editor, view) { info("Pressing key " + key); info("Expecting " + completion + ", " + index + ", " + total); - let onKeyPress; - - if (/tab/ig.test(key)) { - info("Waiting for the new property or value editor to get focused"); - let brace = view.styleDocument.querySelectorAll(".ruleview-ruleclose")[1]; - onKeyPress = once(brace.parentNode, "focus", true); - } else if (/(right|back_space|escape|return)/ig.test(key) || - (modifiers.accelKey || modifiers.ctrlKey)) { - info("Adding event listener for right|escape|back_space|return keys"); - onKeyPress = once(editor.input, "keypress"); + let onDone; + if (willChange) { + // If the key triggers a ruleview-changed, wait for that event, it will + // always be the last to be triggered and tells us when the preview has + // been done. + onDone = view.once("ruleview-changed"); } else { - info("Waiting for after-suggest event on the editor"); - onKeyPress = editor.once("after-suggest"); + // Otherwise, expect an after-suggest event (except if the popup gets + // closed). + onDone = key !== "VK_RIGHT" && key !== "VK_BACK_SPACE" + ? editor.once("after-suggest") + : null; } info("Synthesizing key " + key + ", modifiers: " + Object.keys(modifiers)); EventUtils.synthesizeKey(key, modifiers, view.styleWindow); - - yield onKeyPress; - yield waitForTick(); + yield onDone; info("Checking the state"); if (completion != null) { diff --git a/devtools/client/inspector/rules/test/browser_rules_completion-new-property_04.js b/devtools/client/inspector/rules/test/browser_rules_completion-new-property_04.js index 7bdbd58c5829..76a8d6149746 100644 --- a/devtools/client/inspector/rules/test/browser_rules_completion-new-property_04.js +++ b/devtools/client/inspector/rules/test/browser_rules_completion-new-property_04.js @@ -10,8 +10,8 @@ // - press RETURN to move to the property value // - blur the input to commit -const TEST_URI = "" + - "

    Header

    "; +const TEST_URI = "" + + "

    Header

    "; add_task(function*() { yield addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI)); @@ -21,7 +21,7 @@ add_task(function*() { yield selectNode("h1", inspector); info("Focusing the new property editable field"); - let ruleEditor = getRuleViewRuleEditor(view, 0); + let ruleEditor = getRuleViewRuleEditor(view, 1); let editor = yield focusNewRuleViewProperty(ruleEditor); info("Sending \"background\" to the editable field."); @@ -45,18 +45,17 @@ add_task(function*() { is(editor.input.value, "background-color", "Correct value is autocompleted"); info("Press RETURN to move the focus to a property value editor."); - let onModifications = view.once("ruleview-changed"); + let onModifications = waitForNEvents(view, "ruleview-changed", 2); EventUtils.synthesizeKey("VK_RETURN", {}, view.styleWindow); yield onModifications; // Getting the new value editor after focus - let elementRuleEditor = getRuleViewRuleEditor(view, 0); editor = inplaceEditor(view.styleDocument.activeElement); - let textProp = elementRuleEditor.rule.textProps[1]; + let textProp = ruleEditor.rule.textProps[1]; - is(elementRuleEditor.rule.textProps.length, 2, + is(ruleEditor.rule.textProps.length, 2, "Created a new text property."); - is(elementRuleEditor.propertyList.children.length, 2, + is(ruleEditor.propertyList.children.length, 2, "Created a property editor."); is(editor, inplaceEditor(textProp.editor.valueSpan), "Editing the value span now."); diff --git a/devtools/client/inspector/rules/test/browser_rules_edit-property-commit.js b/devtools/client/inspector/rules/test/browser_rules_edit-property-commit.js index 2940b29dd365..c20f8b38983f 100644 --- a/devtools/client/inspector/rules/test/browser_rules_edit-property-commit.js +++ b/devtools/client/inspector/rules/test/browser_rules_edit-property-commit.js @@ -72,15 +72,13 @@ function* runTestData(view, {value, commitKey, modifiers, expected}) { info("Entering test data " + value); let onRuleViewChanged = view.once("ruleview-changed"); EventUtils.sendString(value, view.styleWindow); - - info("Waiting for focus on the field"); - let onBlur = once(editor.input, "blur"); + yield onRuleViewChanged; info("Entering the commit key " + commitKey + " " + modifiers); + onRuleViewChanged = view.once("ruleview-changed"); + let onBlur = once(editor.input, "blur"); EventUtils.synthesizeKey(commitKey, modifiers); yield onBlur; - // No matter if we escape or commit the change, the preview throttle is going - // to update the property value yield onRuleViewChanged; if (commitKey === "VK_ESCAPE") { diff --git a/devtools/client/inspector/rules/test/browser_rules_multiple_properties_02.js b/devtools/client/inspector/rules/test/browser_rules_multiple_properties_02.js index 465db00a24df..15c8e0f28fa1 100644 --- a/devtools/client/inspector/rules/test/browser_rules_multiple_properties_02.js +++ b/devtools/client/inspector/rules/test/browser_rules_multiple_properties_02.js @@ -13,12 +13,11 @@ add_task(function*() { yield addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI)); let {inspector, view} = yield openRuleView(); yield selectNode("div", inspector); - yield testMultiValues(inspector, view); -}); -function* testMultiValues(inspector, view) { let ruleEditor = getRuleViewRuleEditor(view, 0); + let onDone = view.once("ruleview-changed"); yield createNewRuleViewProperty(ruleEditor, "width:"); + yield onDone; is(ruleEditor.rule.textProps.length, 1, "Should have created a new text property."); @@ -26,11 +25,13 @@ function* testMultiValues(inspector, view) { "Should have created a property editor."); // Value is focused, lets add multiple rules here and make sure they get added + onDone = view.once("ruleview-changed"); let onMutation = inspector.once("markupmutation"); - let valueEditor = ruleEditor.propertyList.children[0].querySelector("input"); - valueEditor.value = "height: 10px;color:blue"; + let input = view.styleDocument.activeElement; + input.value = "height: 10px;color:blue"; EventUtils.synthesizeKey("VK_RETURN", {}, view.styleWindow); yield onMutation; + yield onDone; is(ruleEditor.rule.textProps.length, 2, "Should have added the changed value."); @@ -50,4 +51,4 @@ function* testMultiValues(inspector, view) { "Should have correct property name"); is(ruleEditor.rule.textProps[1].value, "blue", "Should have correct property value"); -} +}); From 64dfb85e353d18d2c4e6ed2620170b2bdf4612b1 Mon Sep 17 00:00:00 2001 From: Julian Descottes Date: Sun, 21 Feb 2016 01:58:00 +0100 Subject: [PATCH 46/60] Bug 1207997 - about:debugging use factories/dom helpers instead of createElement;r=janx Make about:debugging code less verbose: - use component factories to avoid having to remove calls to createElement - use React.DOM helpers - components only module.export their class (require('my-component.js').MyComponent -> require('my-component.js')) MozReview-Commit-ID: CBWLgcPUkMf --HG-- extra : rebase_source : 8e3184bf82ad1b59d65bf0e94cc2f4662db856bd --- .../components/aboutdebugging.js | 44 ++++++++------- .../components/addons-controls.js | 17 +++--- .../aboutdebugging/components/addons-tab.js | 37 ++++++------- .../aboutdebugging/components/tab-header.js | 10 ++-- .../components/tab-menu-entry.js | 19 +++---- .../aboutdebugging/components/tab-menu.js | 14 +++-- .../aboutdebugging/components/target-list.js | 21 ++++---- .../aboutdebugging/components/target.js | 15 +++--- .../aboutdebugging/components/workers-tab.js | 54 ++++++++++--------- devtools/client/aboutdebugging/initializer.js | 14 ++--- 10 files changed, 127 insertions(+), 118 deletions(-) diff --git a/devtools/client/aboutdebugging/components/aboutdebugging.js b/devtools/client/aboutdebugging/components/aboutdebugging.js index 21a735b98404..ef336632d815 100644 --- a/devtools/client/aboutdebugging/components/aboutdebugging.js +++ b/devtools/client/aboutdebugging/components/aboutdebugging.js @@ -8,26 +8,33 @@ const Services = require("Services"); -const React = require("devtools/client/shared/vendor/react"); -const { TabMenu } = require("./tab-menu"); +const { createFactory, createClass, DOM: dom } = + require("devtools/client/shared/vendor/react"); -loader.lazyRequireGetter(this, "AddonsTab", "./components/addons-tab", true); -loader.lazyRequireGetter(this, "WorkersTab", "./components/workers-tab", true); +const TabMenu = createFactory(require("./tab-menu")); +loader.lazyGetter(this, "AddonsTab", + () => createFactory(require("./addons-tab"))); +loader.lazyGetter(this, "WorkersTab", + () => createFactory(require("./workers-tab"))); const Strings = Services.strings.createBundle( "chrome://devtools/locale/aboutdebugging.properties"); -const tabs = [ - { id: "addons", name: Strings.GetStringFromName("addons"), - icon: "chrome://devtools/skin/images/debugging-addons.svg", - component: AddonsTab }, - { id: "workers", name: Strings.GetStringFromName("workers"), - icon: "chrome://devtools/skin/images/debugging-workers.svg", - component: WorkersTab }, -]; +const tabs = [{ + id: "addons", + name: Strings.GetStringFromName("addons"), + icon: "chrome://devtools/skin/images/debugging-addons.svg", + component: AddonsTab +}, { + id: "workers", + name: Strings.GetStringFromName("workers"), + icon: "chrome://devtools/skin/images/debugging-workers.svg", + component: WorkersTab +}]; + const defaultTabId = "addons"; -exports.AboutDebuggingApp = React.createClass({ +module.exports = createClass({ displayName: "AboutDebuggingApp", getInitialState() { @@ -55,12 +62,11 @@ exports.AboutDebuggingApp = React.createClass({ let selectedTab = tabs.find(t => t.id == selectedTabId); - return React.createElement( - "div", { className: "app"}, - React.createElement(TabMenu, { tabs, selectedTabId, selectTab }), - React.createElement("div", { className: "main-content" }, - React.createElement(selectedTab.component, { client })) - ); + return dom.div({ className: "app" }, + TabMenu({ tabs, selectedTabId, selectTab }), + dom.div({ className: "main-content" }, + selectedTab.component({ client })) + ); }, onHashChange() { diff --git a/devtools/client/aboutdebugging/components/addons-controls.js b/devtools/client/aboutdebugging/components/addons-controls.js index 4f69eedf04fc..4ae88a8382a7 100644 --- a/devtools/client/aboutdebugging/components/addons-controls.js +++ b/devtools/client/aboutdebugging/components/addons-controls.js @@ -12,7 +12,7 @@ loader.lazyImporter(this, "AddonManager", const { Cc, Ci } = require("chrome"); const Services = require("Services"); -const React = require("devtools/client/shared/vendor/react"); +const { createClass, DOM: dom } = require("devtools/client/shared/vendor/react"); const Strings = Services.strings.createBundle( "chrome://devtools/locale/aboutdebugging.properties"); @@ -20,32 +20,31 @@ const Strings = Services.strings.createBundle( const MORE_INFO_URL = "https://developer.mozilla.org/docs/Tools" + "/about:debugging#Enabling_add-on_debugging"; -exports.AddonsControls = React.createClass({ +module.exports = createClass({ displayName: "AddonsControls", render() { let { debugDisabled } = this.props; - return React.createElement( - "div", { className: "addons-controls" }, React.createElement( - "div", { className: "addons-options" }, - React.createElement("input", { + return dom.div({ className: "addons-controls" }, + dom.div({ className: "addons-options" }, + dom.input({ id: "enable-addon-debugging", type: "checkbox", checked: !debugDisabled, onChange: this.onEnableAddonDebuggingChange, }), - React.createElement("label", { + dom.label({ className: "addons-debugging-label", htmlFor: "enable-addon-debugging", title: Strings.GetStringFromName("addonDebugging.tooltip") }, Strings.GetStringFromName("addonDebugging.label")), "(", - React.createElement("a", { href: MORE_INFO_URL, target: "_blank" }, + dom.a({ href: MORE_INFO_URL, target: "_blank" }, Strings.GetStringFromName("addonDebugging.moreInfo")), ")" ), - React.createElement("button", { + dom.button({ id: "load-addon-from-file", onClick: this.loadAddonFromFile, }, Strings.GetStringFromName("loadTemporaryAddon")) diff --git a/devtools/client/aboutdebugging/components/addons-tab.js b/devtools/client/aboutdebugging/components/addons-tab.js index 6d6b982f2d5c..ff87e1ee6f09 100644 --- a/devtools/client/aboutdebugging/components/addons-tab.js +++ b/devtools/client/aboutdebugging/components/addons-tab.js @@ -2,17 +2,16 @@ * 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/. */ -/* global React */ - "use strict"; const { AddonManager } = require("resource://gre/modules/AddonManager.jsm"); const Services = require("Services"); -const React = require("devtools/client/shared/vendor/react"); -const { AddonsControls } = require("./addons-controls"); -const { TabHeader } = require("./tab-header"); -const { TargetList } = require("./target-list"); +const { createFactory, createClass, DOM: dom } = + require("devtools/client/shared/vendor/react"); +const AddonsControls = createFactory(require("./addons-controls")); +const TabHeader = createFactory(require("./tab-header")); +const TargetList = createFactory(require("./target-list")); const ExtensionIcon = "chrome://mozapps/skin/extensions/extensionGeneric.svg"; const Strings = Services.strings.createBundle( @@ -21,7 +20,7 @@ const Strings = Services.strings.createBundle( const CHROME_ENABLED_PREF = "devtools.chrome.enabled"; const REMOTE_ENABLED_PREF = "devtools.debugger.remote-enabled"; -exports.AddonsTab = React.createClass({ +module.exports = createClass({ displayName: "AddonsTab", getInitialState() { @@ -56,19 +55,17 @@ exports.AddonsTab = React.createClass({ let { debugDisabled, extensions: targets } = this.state; let name = Strings.GetStringFromName("extensions"); - return React.createElement( - "div", { id: "tab-addons", className: "tab", role: "tabpanel", - "aria-labelledby": "tab-addons-header-name" }, - React.createElement(TabHeader, { - id: "tab-addons-header-name", - name: Strings.GetStringFromName("addons")}), - React.createElement(AddonsControls, { debugDisabled }), - React.createElement( - "div", { id: "addons" }, - React.createElement(TargetList, - { name, targets, client, debugDisabled }) - ) - ); + return dom.div({ + id: "tab-addons", + className: "tab", + role: "tabpanel", + "aria-labelledby": "tab-addons-header-name" }, + TabHeader({ + id: "tab-addons-header-name", + name: Strings.GetStringFromName("addons") }), + AddonsControls({ debugDisabled }), + dom.div({ id: "addons" }, + TargetList({ name, targets, client, debugDisabled }))); }, updateDebugStatus() { diff --git a/devtools/client/aboutdebugging/components/tab-header.js b/devtools/client/aboutdebugging/components/tab-header.js index eb616922a64b..940c5ec4b8b8 100644 --- a/devtools/client/aboutdebugging/components/tab-header.js +++ b/devtools/client/aboutdebugging/components/tab-header.js @@ -4,16 +4,16 @@ "use strict"; -const React = require("devtools/client/shared/vendor/react"); +const { createClass, DOM: dom } = + require("devtools/client/shared/vendor/react"); -exports.TabHeader = React.createClass({ +module.exports = createClass({ displayName: "TabHeader", render() { let { name, id } = this.props; - return React.createElement( - "div", { className: "header" }, React.createElement( - "h1", { id, className: "header-name" }, name)); + return dom.div({ className: "header" }, + dom.h1({ id, className: "header-name" }, name)); }, }); diff --git a/devtools/client/aboutdebugging/components/tab-menu-entry.js b/devtools/client/aboutdebugging/components/tab-menu-entry.js index 4278fae6fbf4..c4c932441c45 100644 --- a/devtools/client/aboutdebugging/components/tab-menu-entry.js +++ b/devtools/client/aboutdebugging/components/tab-menu-entry.js @@ -4,9 +4,10 @@ "use strict"; -const React = require("devtools/client/shared/vendor/react"); +const { createClass, DOM: dom } = + require("devtools/client/shared/vendor/react"); -exports.TabMenuEntry = React.createClass({ +module.exports = createClass({ displayName: "TabMenuEntry", render() { @@ -15,13 +16,13 @@ exports.TabMenuEntry = React.createClass({ // Here .category, .category-icon, .category-name classnames are used to // apply common styles defined. let className = "category" + (selected ? " selected" : ""); - return React.createElement( - "div", { className, onClick: this.onClick, - "aria-selected": selected, role: "tab" }, - React.createElement("img", { className: "category-icon", src: icon, - role: "presentation" }), - React.createElement("div", { className: "category-name" }, name) - ); + return dom.div({ + "aria-selected": selected, + className, + onClick: this.onClick, + role: "tab" }, + dom.img({ className: "category-icon", src: icon, role: "presentation" }), + dom.div({ className: "category-name" }, name)); }, onClick() { diff --git a/devtools/client/aboutdebugging/components/tab-menu.js b/devtools/client/aboutdebugging/components/tab-menu.js index 02a1f78afcc0..02d5f2728262 100644 --- a/devtools/client/aboutdebugging/components/tab-menu.js +++ b/devtools/client/aboutdebugging/components/tab-menu.js @@ -2,25 +2,23 @@ * 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/. */ -/* global React */ - "use strict"; -const React = require("devtools/client/shared/vendor/react"); -const { TabMenuEntry } = require("./tab-menu-entry"); +const { createClass, createFactory, DOM: dom } = + require("devtools/client/shared/vendor/react"); +const TabMenuEntry = createFactory(require("./tab-menu-entry")); -exports.TabMenu = React.createClass({ +module.exports = createClass({ displayName: "TabMenu", render() { let { tabs, selectedTabId, selectTab } = this.props; let tabLinks = tabs.map(({ id, name, icon }) => { let selected = id == selectedTabId; - return React.createElement(TabMenuEntry, - { tabId: id, name, icon, selected, selectTab }); + return TabMenuEntry({ tabId: id, name, icon, selected, selectTab }); }); // "categories" id used for styling purposes - return React.createElement("div", { id: "categories" }, tabLinks); + return dom.div({ id: "categories" }, tabLinks); }, }); diff --git a/devtools/client/aboutdebugging/components/target-list.js b/devtools/client/aboutdebugging/components/target-list.js index 5aa1bde95f65..e1fbae3114fc 100644 --- a/devtools/client/aboutdebugging/components/target-list.js +++ b/devtools/client/aboutdebugging/components/target-list.js @@ -2,14 +2,13 @@ * 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/. */ -/* global React */ - "use strict"; const Services = require("Services"); -const React = require("devtools/client/shared/vendor/react"); -const { Target } = require("./target"); +const { createClass, createFactory, DOM: dom } = + require("devtools/client/shared/vendor/react"); +const Target = createFactory(require("./target")); const Strings = Services.strings.createBundle( "chrome://devtools/locale/aboutdebugging.properties"); @@ -18,19 +17,21 @@ const LocaleCompare = (a, b) => { return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); }; -exports.TargetList = React.createClass({ +module.exports = createClass({ displayName: "TargetList", render() { let { client, debugDisabled } = this.props; let targets = this.props.targets.sort(LocaleCompare).map(target => { - return React.createElement(Target, { client, target, debugDisabled }); + return Target({ client, target, debugDisabled }); }); + return ( - React.createElement("div", { id: this.props.id, className: "targets" }, - React.createElement("h4", null, this.props.name), - targets.length > 0 ? targets : - React.createElement("p", null, Strings.GetStringFromName("nothing")) + dom.div({ id: this.props.id, className: "targets" }, + dom.h4(null, this.props.name), + targets.length > 0 ? + targets : + dom.p(null, Strings.GetStringFromName("nothing")) ) ); }, diff --git a/devtools/client/aboutdebugging/components/target.js b/devtools/client/aboutdebugging/components/target.js index a048e1ca24e9..5f2c6e3cc834 100644 --- a/devtools/client/aboutdebugging/components/target.js +++ b/devtools/client/aboutdebugging/components/target.js @@ -17,28 +17,29 @@ loader.lazyImporter(this, "BrowserToolboxProcess", "resource://devtools/client/framework/ToolboxProcess.jsm"); const Services = require("Services"); -const React = require("devtools/client/shared/vendor/react"); +const { createClass, DOM: dom } = + require("devtools/client/shared/vendor/react"); const Strings = Services.strings.createBundle( "chrome://devtools/locale/aboutdebugging.properties"); -exports.Target = React.createClass({ +module.exports = createClass({ displayName: "Target", render() { let { target, debugDisabled } = this.props; let isServiceWorker = (target.type === "serviceworker"); let isRunning = (!isServiceWorker || target.workerActor); - return React.createElement("div", { className: "target" }, - React.createElement("img", { + return dom.div({ className: "target" }, + dom.img({ className: "target-icon", role: "presentation", src: target.icon }), - React.createElement("div", { className: "target-details" }, - React.createElement("div", { className: "target-name" }, target.name) + dom.div({ className: "target-details" }, + dom.div({ className: "target-name" }, target.name) ), (isRunning ? - React.createElement("button", { + dom.button({ className: "debug-button", onClick: this.debug, disabled: debugDisabled, diff --git a/devtools/client/aboutdebugging/components/workers-tab.js b/devtools/client/aboutdebugging/components/workers-tab.js index 1b828cde4e26..032061d36b6d 100644 --- a/devtools/client/aboutdebugging/components/workers-tab.js +++ b/devtools/client/aboutdebugging/components/workers-tab.js @@ -8,15 +8,16 @@ const { Ci } = require("chrome"); const { Task } = require("resource://gre/modules/Task.jsm"); const Services = require("Services"); -const React = require("devtools/client/shared/vendor/react"); -const { TargetList } = require("./target-list"); -const { TabHeader } = require("./tab-header"); +const { createClass, createFactory, DOM: dom } = + require("devtools/client/shared/vendor/react"); +const TabHeader = createFactory(require("./tab-header")); +const TargetList = createFactory(require("./target-list")); const Strings = Services.strings.createBundle( "chrome://devtools/locale/aboutdebugging.properties"); const WorkerIcon = "chrome://devtools/skin/images/debugging-workers.svg"; -exports.WorkersTab = React.createClass({ +module.exports = createClass({ displayName: "WorkersTab", getInitialState() { @@ -48,27 +49,30 @@ exports.WorkersTab = React.createClass({ let { client } = this.props; let { workers } = this.state; - return React.createElement( - "div", { id: "tab-workers", className: "tab", role: "tabpanel", - "aria-labelledby": "tab-workers-header-name" }, - React.createElement(TabHeader, { - id: "tab-workers-header-name", - name: Strings.GetStringFromName("workers")}), - React.createElement( - "div", { id: "workers", className: "inverted-icons" }, - React.createElement(TargetList, { - id: "service-workers", - name: Strings.GetStringFromName("serviceWorkers"), - targets: workers.service, client }), - React.createElement(TargetList, { - id: "shared-workers", - name: Strings.GetStringFromName("sharedWorkers"), - targets: workers.shared, client }), - React.createElement(TargetList, { - id: "other-workers", - name: Strings.GetStringFromName("otherWorkers"), - targets: workers.other, client })) - ); + return dom.div({ + id: "tab-workers", + className: "tab", + role: "tabpanel", + "aria-labelledby": "tab-workers-header-name" }, + TabHeader({ + id: "tab-workers-header-name", + name: Strings.GetStringFromName("workers") }), + dom.div({ id: "workers", className: "inverted-icons" }, + TargetList({ + id: "service-workers", + name: Strings.GetStringFromName("serviceWorkers"), + targets: workers.service, + client }), + TargetList({ + id: "shared-workers", + name: Strings.GetStringFromName("sharedWorkers"), + targets: workers.shared, + client }), + TargetList({ + id: "other-workers", + name: Strings.GetStringFromName("otherWorkers"), + targets: workers.other, + client }))); }, update() { diff --git a/devtools/client/aboutdebugging/initializer.js b/devtools/client/aboutdebugging/initializer.js index 89e3958bc4b9..5e91ad3d1da0 100644 --- a/devtools/client/aboutdebugging/initializer.js +++ b/devtools/client/aboutdebugging/initializer.js @@ -3,7 +3,6 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* eslint-env browser */ -/* global DebuggerClient, DebuggerServer */ "use strict"; @@ -22,8 +21,11 @@ const { BrowserLoader } = Components.utils.import( const { require } = BrowserLoader("resource://devtools/client/aboutdebugging/", window); -const React = require("devtools/client/shared/vendor/react"); -const { AboutDebuggingApp } = require("./components/aboutdebugging"); +const { + createFactory, + render, + unmountComponentAtNode } = require("devtools/client/shared/vendor/react"); +const AboutDebuggingApp = createFactory(require("./components/aboutdebugging")); var AboutDebugging = { init() { @@ -38,13 +40,13 @@ var AboutDebugging = { let client = this.client; let telemetry = new Telemetry(); - let app = React.createElement(AboutDebuggingApp, { client, telemetry }); - React.render(app, document.querySelector("#body")); + render(AboutDebuggingApp({ client, telemetry }), + document.querySelector("#body")); }); }, destroy() { - React.unmountComponentAtNode(document.querySelector("#body")); + unmountComponentAtNode(document.querySelector("#body")); this.client.close(); this.client = null; From cd643848b16ca98758f02c67e114f241cd058515 Mon Sep 17 00:00:00 2001 From: Gijs Kruitbosch Date: Wed, 24 Feb 2016 15:23:35 +0000 Subject: [PATCH 47/60] Bug 1088710 - part 1: fix some leftover gunk from pre-australis menubutton, r=mconley MozReview-Commit-ID: C4fA6cboVZY --HG-- extra : rebase_source : 8eb98fdab15cee43ba7a7b4a395d0f9a9287086e --- browser/base/content/browser-charsetmenu.inc | 6 ------ browser/base/content/browser.js | 4 ++-- toolkit/modules/CharsetMenu.jsm | 15 ++++++++++----- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/browser/base/content/browser-charsetmenu.inc b/browser/base/content/browser-charsetmenu.inc index 08bc91a8e358..89b797cfcd82 100644 --- a/browser/base/content/browser-charsetmenu.inc +++ b/browser/base/content/browser-charsetmenu.inc @@ -4,15 +4,9 @@ diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 227f0932ca8f..36f796927c9e 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -5492,9 +5492,9 @@ function BrowserCharsetReload() } function UpdateCurrentCharset(target) { + let selectedCharset = CharsetMenu.foldCharset(gBrowser.selectedBrowser.characterSet); for (let menuItem of target.getElementsByTagName("menuitem")) { - let isSelected = menuItem.getAttribute("charset") === - CharsetMenu.foldCharset(gBrowser.selectedBrowser.characterSet); + let isSelected = menuItem.getAttribute("charset") === selectedCharset; menuItem.setAttribute("checked", isSelected); } } diff --git a/toolkit/modules/CharsetMenu.jsm b/toolkit/modules/CharsetMenu.jsm index 5989e4074df7..f6479c024804 100644 --- a/toolkit/modules/CharsetMenu.jsm +++ b/toolkit/modules/CharsetMenu.jsm @@ -13,6 +13,9 @@ XPCOMUtils.defineLazyGetter(this, "gBundle", function() { return Services.strings.createBundle(kUrl); }); +XPCOMUtils.defineLazyModuleGetter(this, "Deprecated", + "resource://gre/modules/Deprecated.jsm"); + const kAutoDetectors = [ ["off", ""], ["ja", "ja_parallel_state_machine"], @@ -117,14 +120,18 @@ function UpdateDetectorMenu(event) { var gDetectorInfoCache, gCharsetInfoCache, gPinnedInfoCache; var CharsetMenu = { - build: function(parent, showAccessKeys=true, showDetector=true) { + build: function(parent, deprecatedShowAccessKeys=true, showDetector=true) { + if (!deprecatedShowAccessKeys) { + Deprecated.warning("CharsetMenu no longer supports building a menu with no access keys.", + "https://bugzilla.mozilla.org/show_bug.cgi?id=1088710"); + } function createDOMNode(doc, nodeInfo) { let node = doc.createElement("menuitem"); node.setAttribute("type", "radio"); node.setAttribute("name", nodeInfo.name + "Group"); node.setAttribute(nodeInfo.name, nodeInfo.value); node.setAttribute("label", nodeInfo.label); - if (showAccessKeys && nodeInfo.accesskey) { + if (nodeInfo.accesskey) { node.setAttribute("accesskey", nodeInfo.accesskey); } return node; @@ -140,9 +147,7 @@ var CharsetMenu = { if (showDetector) { let menuNode = doc.createElement("menu"); menuNode.setAttribute("label", gBundle.GetStringFromName("charsetMenuAutodet")); - if (showAccessKeys) { - menuNode.setAttribute("accesskey", gBundle.GetStringFromName("charsetMenuAutodet.key")); - } + menuNode.setAttribute("accesskey", gBundle.GetStringFromName("charsetMenuAutodet.key")); parent.appendChild(menuNode); let menuPopupNode = doc.createElement("menupopup"); From 0a197aae91469341430bb819b98eb2b10e1612b2 Mon Sep 17 00:00:00 2001 From: Gijs Kruitbosch Date: Wed, 24 Feb 2016 15:24:20 +0000 Subject: [PATCH 48/60] Bug 1088710 - part 2: make it work on e10s, r=mconley MozReview-Commit-ID: FhlfqJ1gmjR --HG-- extra : rebase_source : 915ecec63d95583114f2c01894748dfda4025321 --- .../components/customizableui/test/browser.ini | 2 -- .../test/browser_967000_button_charEncoding.js | 18 +++++++----------- .../test/browser_987640_charEncoding.js | 14 ++++++-------- toolkit/content/browser-child.js | 2 ++ toolkit/modules/RemoteWebProgress.jsm | 6 ++++-- 5 files changed, 19 insertions(+), 23 deletions(-) diff --git a/browser/components/customizableui/test/browser.ini b/browser/components/customizableui/test/browser.ini index b48485abcabc..eba92aa833cd 100644 --- a/browser/components/customizableui/test/browser.ini +++ b/browser/components/customizableui/test/browser.ini @@ -99,7 +99,6 @@ skip-if = os == "linux" # Intermittent failures [browser_962884_opt_in_disable_hyphens.js] [browser_963639_customizing_attribute_non_customizable_toolbar.js] [browser_967000_button_charEncoding.js] -skip-if = e10s # Bug 1088710 [browser_967000_button_feeds.js] [browser_967000_button_sync.js] [browser_968447_bookmarks_toolbar_items_in_panel.js] @@ -127,7 +126,6 @@ skip-if = os == "linux" [browser_987185_syncButton.js] [browser_987492_window_api.js] [browser_987640_charEncoding.js] -skip-if = e10s # Bug 1088710 [browser_988072_sidebar_events.js] [browser_989338_saved_placements_not_resaved.js] [browser_989751_subviewbutton_class.js] diff --git a/browser/components/customizableui/test/browser_967000_button_charEncoding.js b/browser/components/customizableui/test/browser_967000_button_charEncoding.js index ad49a310d84c..6771ffb94198 100644 --- a/browser/components/customizableui/test/browser_967000_button_charEncoding.js +++ b/browser/components/customizableui/test/browser_967000_button_charEncoding.js @@ -6,9 +6,6 @@ const TEST_PAGE = "http://mochi.test:8888/browser/browser/components/customizableui/test/support/test_967000_charEncoding_page.html"; -var newTab; -var initialLocation = gBrowser.currentURI.spec; - add_task(function*() { info("Check Character Encoding button functionality"); @@ -28,14 +25,15 @@ add_task(function*() { PanelUI.hide(); yield panelHidePromise; - newTab = gBrowser.selectedTab; - yield promiseTabLoadEvent(newTab, TEST_PAGE) + let newTab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_PAGE, true); yield PanelUI.show(); ok(!charEncodingButton.hasAttribute("disabled"), "The Character encoding button gets enabled"); - charEncodingButton.click(); - let characterEncodingView = document.getElementById("PanelUI-characterEncodingView"); + let subviewShownPromise = subviewShown(characterEncodingView); + charEncodingButton.click(); + yield subviewShownPromise; + ok(characterEncodingView.hasAttribute("current"), "The Character encoding panel is displayed"); let pinnedEncodings = document.getElementById("PanelUI-characterEncodingView-pinned"); @@ -53,14 +51,12 @@ add_task(function*() { panelHidePromise = promisePanelHidden(window); PanelUI.hide(); yield panelHidePromise; + + yield BrowserTestUtils.removeTab(newTab); }); add_task(function* asyncCleanup() { // reset the panel to the default state yield resetCustomization(); ok(CustomizableUI.inDefaultState, "The UI is in default state again."); - - // restore the initial location - gBrowser.addTab(initialLocation); - gBrowser.removeTab(newTab); }); diff --git a/browser/components/customizableui/test/browser_987640_charEncoding.js b/browser/components/customizableui/test/browser_987640_charEncoding.js index 25c258b2cefe..c223e37ff4f5 100644 --- a/browser/components/customizableui/test/browser_987640_charEncoding.js +++ b/browser/components/customizableui/test/browser_987640_charEncoding.js @@ -5,7 +5,6 @@ "use strict"; const TEST_PAGE = "http://mochi.test:8888/browser/browser/components/customizableui/test/support/test_967000_charEncoding_page.html"; -var newTab = null; add_task(function*() { info("Check Character Encoding panel functionality"); @@ -14,14 +13,15 @@ add_task(function*() { CustomizableUI.addWidgetToArea("characterencoding-button", CustomizableUI.AREA_PANEL); - newTab = gBrowser.addTab(TEST_PAGE); - yield promiseTabLoadEvent(gBrowser.selectedTab, TEST_PAGE); + let newTab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_PAGE, true); yield PanelUI.show(); let charEncodingButton = document.getElementById("characterencoding-button"); - charEncodingButton.click(); - let characterEncodingView = document.getElementById("PanelUI-characterEncodingView"); + let subviewShownPromise = subviewShown(characterEncodingView); + charEncodingButton.click(); + yield subviewShownPromise; + let checkedButtons = characterEncodingView.querySelectorAll("toolbarbutton[checked='true']"); let initialEncoding = checkedButtons[0]; is(initialEncoding.getAttribute("label"), "Unicode", "The unicode encoding is initially selected"); @@ -50,13 +50,11 @@ add_task(function*() { charEncodingButton.click(); checkedButtons = characterEncodingView.querySelectorAll("toolbarbutton[checked='true']"); is(checkedButtons[0].getAttribute("label"), "Unicode", "The encoding was reset to Unicode"); + yield BrowserTestUtils.removeTab(newTab); }); add_task(function* asyncCleanup() { // reset the panel to the default state yield resetCustomization(); ok(CustomizableUI.inDefaultState, "The UI is in default state again."); - - // remove the added tab - gBrowser.removeTab(newTab); }); diff --git a/toolkit/content/browser-child.js b/toolkit/content/browser-child.js index 85a8b9da674e..c139279349b3 100644 --- a/toolkit/content/browser-child.js +++ b/toolkit/content/browser-child.js @@ -128,6 +128,8 @@ var WebProgressListener = { // the documentURI. if (aWebProgress && aWebProgress.isTopLevel) { json.documentURI = content.document.documentURIObject.spec; + json.charset = content.document.characterSet; + json.mayEnableCharacterEncodingMenu = docShell.mayEnableCharacterEncodingMenu; } this._send("Content:StateChange", json, objects); diff --git a/toolkit/modules/RemoteWebProgress.jsm b/toolkit/modules/RemoteWebProgress.jsm index 1070b57e4211..c5dba459d8aa 100644 --- a/toolkit/modules/RemoteWebProgress.jsm +++ b/toolkit/modules/RemoteWebProgress.jsm @@ -211,6 +211,10 @@ RemoteWebProgressManager.prototype = { if (isTopLevel) { this._browser._contentWindow = objects.contentWindow; this._browser._documentContentType = json.documentContentType; + if (json.charset) { + this._browser._characterSet = json.charset; + this._browser._mayEnableCharacterEncodingMenu = json.mayEnableCharacterEncodingMenu; + } } switch (aMessage.name) { @@ -232,11 +236,9 @@ RemoteWebProgressManager.prototype = { if (isTopLevel) { remoteWebNav._currentURI = location; - this._browser._characterSet = json.charset; this._browser._documentURI = newURI(json.documentURI); this._browser._contentTitle = json.title; this._browser._imageDocument = null; - this._browser._mayEnableCharacterEncodingMenu = json.mayEnableCharacterEncodingMenu; this._browser._contentPrincipal = json.principal; this._browser._isSyntheticDocument = json.synthetic; this._browser._innerWindowID = json.innerWindowID; From 3b845c302c56edadb8393730f2b579c7df91f6d9 Mon Sep 17 00:00:00 2001 From: Gijs Kruitbosch Date: Fri, 26 Feb 2016 21:26:43 +0000 Subject: [PATCH 49/60] Bug 1088710 - part 3: wait for STATE_STOP as well as load, r=mconley MozReview-Commit-ID: 3ztx6kPOdON --HG-- extra : rebase_source : 4ddfbdf9c641e020dba66e5c642513f8dd0fb061 --- .../browser_967000_button_charEncoding.js | 2 +- .../test/browser_987640_charEncoding.js | 2 +- .../BrowserTestUtils/BrowserTestUtils.jsm | 44 ++++++++++++++++++- 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/browser/components/customizableui/test/browser_967000_button_charEncoding.js b/browser/components/customizableui/test/browser_967000_button_charEncoding.js index 6771ffb94198..0688ebbd642f 100644 --- a/browser/components/customizableui/test/browser_967000_button_charEncoding.js +++ b/browser/components/customizableui/test/browser_967000_button_charEncoding.js @@ -25,7 +25,7 @@ add_task(function*() { PanelUI.hide(); yield panelHidePromise; - let newTab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_PAGE, true); + let newTab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_PAGE, true, true); yield PanelUI.show(); ok(!charEncodingButton.hasAttribute("disabled"), "The Character encoding button gets enabled"); diff --git a/browser/components/customizableui/test/browser_987640_charEncoding.js b/browser/components/customizableui/test/browser_987640_charEncoding.js index c223e37ff4f5..dfe02f940d7a 100644 --- a/browser/components/customizableui/test/browser_987640_charEncoding.js +++ b/browser/components/customizableui/test/browser_987640_charEncoding.js @@ -13,7 +13,7 @@ add_task(function*() { CustomizableUI.addWidgetToArea("characterencoding-button", CustomizableUI.AREA_PANEL); - let newTab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_PAGE, true); + let newTab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_PAGE, true, true); yield PanelUI.show(); let charEncodingButton = document.getElementById("characterencoding-button"); diff --git a/testing/mochitest/BrowserTestUtils/BrowserTestUtils.jsm b/testing/mochitest/BrowserTestUtils/BrowserTestUtils.jsm index 46983af194a0..73c7cd6e4057 100644 --- a/testing/mochitest/BrowserTestUtils/BrowserTestUtils.jsm +++ b/testing/mochitest/BrowserTestUtils/BrowserTestUtils.jsm @@ -78,12 +78,15 @@ this.BrowserTestUtils = { * will be called to open a foreground tab. Defaults to "about:blank". * @param {boolean} waitForLoad * True to wait for the page in the new tab to load. Defaults to true. + * @param {boolean} waitForStateStop + * True to wait for the web progress listener to send STATE_STOP for the + * document in the tab. Defaults to false. * * @return {Promise} * Resolves when the tab is ready and loaded as necessary. * @resolves The new tab. */ - openNewForegroundTab(tabbrowser, opening = "about:blank", aWaitForLoad = true) { + openNewForegroundTab(tabbrowser, opening = "about:blank", aWaitForLoad = true, aWaitForStateStop = false) { let tab; let promises = [ BrowserTestUtils.switchTab(tabbrowser, function () { @@ -100,6 +103,9 @@ this.BrowserTestUtils = { if (aWaitForLoad) { promises.push(BrowserTestUtils.browserLoaded(tab.linkedBrowser)); } + if (aWaitForStateStop) { + promises.push(BrowserTestUtils.browserStopped(tab.linkedBrowser)); + } return Promise.all(promises).then(() => tab); }, @@ -178,6 +184,42 @@ this.BrowserTestUtils = { }); }, + /** + * Waits for the web progress listener associated with this tab to fire a + * STATE_STOP for the toplevel document. + * + * @param {xul:browser} browser + * A xul:browser. + * + * @return {Promise} + * @resolves When STATE_STOP reaches the tab's progress listener + */ + browserStopped(browser) { + return new Promise(resolve => { + let wpl = { + onStateChange(aWebProgress, aRequest, aStateFlags, aStatus) { + if (aStateFlags & Ci.nsIWebProgressListener.STATE_STOP && + aWebProgress.isTopLevel) { + browser.webProgress.removeProgressListener(filter); + filter.removeProgressListener(wpl); + resolve(); + }; + }, + onSecurityChange() {}, + onStatusChange() {}, + onLocationChange() {}, + QueryInterface: XPCOMUtils.generateQI([ + Ci.nsIWebProgressListener, + Ci.nsIWebProgressListener2, + ]), + }; + const filter = Cc["@mozilla.org/appshell/component/browser-status-filter;1"] + .createInstance(Ci.nsIWebProgress); + filter.addProgressListener(wpl, Ci.nsIWebProgress.NOTIFY_ALL); + browser.webProgress.addProgressListener(filter, Ci.nsIWebProgress.NOTIFY_ALL); + }); + }, + /** * Waits for the next tab to open and load a given URL. * From 460dc7daaf8989bfefa3494261b8b556297ca503 Mon Sep 17 00:00:00 2001 From: Gijs Kruitbosch Date: Fri, 26 Feb 2016 16:34:40 +0000 Subject: [PATCH 50/60] Bug 1101973 - fix browser_printpreview.js to work in e10s mode, r=mconley MozReview-Commit-ID: HG5yGatBdj2 --HG-- extra : rebase_source : f65ba741948a32dc9b43f613a9d8be2ae2313248 --- browser/base/content/test/general/browser.ini | 2 +- .../test/general/browser_printpreview.js | 27 ++++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/browser/base/content/test/general/browser.ini b/browser/base/content/test/general/browser.ini index 21233191bdf8..fe0b6df32304 100644 --- a/browser/base/content/test/general/browser.ini +++ b/browser/base/content/test/general/browser.ini @@ -367,7 +367,7 @@ skip-if = buildapp == 'mulet' [browser_popup_blocker.js] skip-if = (os == 'linux') || (e10s && debug) # Frequent bug 1081925 and bug 1125520 failures [browser_printpreview.js] -skip-if = buildapp == 'mulet' || e10s # Bug 1101973 - breaks the next test in e10s, and may be responsible for later timeout after logging "Error: Channel closing: too late to send/recv, messages will be lost" +skip-if = buildapp == 'mulet' [browser_private_browsing_window.js] skip-if = buildapp == 'mulet' [browser_private_no_prompt.js] diff --git a/browser/base/content/test/general/browser_printpreview.js b/browser/base/content/test/general/browser_printpreview.js index 8195897c26eb..c38fc18beacf 100644 --- a/browser/base/content/test/general/browser_printpreview.js +++ b/browser/base/content/test/general/browser_printpreview.js @@ -1,14 +1,23 @@ +let ourTab; + function test() { waitForExplicitFinish(); - ok(!gInPrintPreviewMode, - "Should NOT be in print preview mode at starting this tests"); - // Skip access key test on platforms which don't support access key. - if (!/Win|Linux/.test(navigator.platform)) { - openPrintPreview(testClosePrintPreviewWithEscKey); - } else { - openPrintPreview(testClosePrintPreviewWithAccessKey); - } + BrowserTestUtils.openNewForegroundTab(gBrowser, "about:home", true).then(function(tab) { + ourTab = tab; + ok(!gInPrintPreviewMode, + "Should NOT be in print preview mode at starting this tests"); + // Skip access key test on platforms which don't support access key. + if (!/Win|Linux/.test(navigator.platform)) { + openPrintPreview(testClosePrintPreviewWithEscKey); + } else { + openPrintPreview(testClosePrintPreviewWithAccessKey); + } + }); +} + +function tidyUp() { + BrowserTestUtils.removeTab(ourTab).then(finish); } function testClosePrintPreviewWithAccessKey() { @@ -34,7 +43,7 @@ function testClosePrintPreviewWithClosingWindowShortcutKey() { checkPrintPreviewClosed(function (aSucceeded) { ok(aSucceeded, "print preview mode should be finished by closing window shortcut key"); - finish(); + tidyUp(); }); } From 0065f67e72add8bfa132652457792908fa429977 Mon Sep 17 00:00:00 2001 From: Gijs Kruitbosch Date: Fri, 26 Feb 2016 16:01:43 +0000 Subject: [PATCH 51/60] Bug 1101993 - test seems to have fixed itself, rs=test-enabling-with-green-try MozReview-Commit-ID: IqDoAcfUIVy --HG-- extra : rebase_source : 275b7240ad31c12444a9e3f69f64ebe309416470 --- browser/base/content/test/general/browser.ini | 1 - 1 file changed, 1 deletion(-) diff --git a/browser/base/content/test/general/browser.ini b/browser/base/content/test/general/browser.ini index fe0b6df32304..eb5b5d08f02c 100644 --- a/browser/base/content/test/general/browser.ini +++ b/browser/base/content/test/general/browser.ini @@ -142,7 +142,6 @@ skip-if = e10s # Bug 1093153 - no about:home support yet [browser_alltabslistener.js] [browser_audioTabIcon.js] [browser_autocomplete_a11y_label.js] -skip-if = e10s # Bug 1101993 - times out for unknown reasons when run in the dir (works on its own) [browser_autocomplete_cursor.js] [browser_autocomplete_edit_completed.js] [browser_autocomplete_enter_race.js] From c2d150995a2d37e2bcd5324fb706b7cb5afe203d Mon Sep 17 00:00:00 2001 From: Gijs Kruitbosch Date: Fri, 26 Feb 2016 16:07:44 +0000 Subject: [PATCH 52/60] Bug 1251622 - fix save link tests to work in e10s, rs=trivial,green-try MozReview-Commit-ID: CvQIMjZKCXl --HG-- extra : rebase_source : 4471f41791d98459250944540be06967c3fdfab4 --- browser/base/content/test/general/browser.ini | 6 +++--- .../content/test/general/browser_save_link-perwindowpb.js | 2 +- .../test/general/browser_save_private_link_perwindowpb.js | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/browser/base/content/test/general/browser.ini b/browser/base/content/test/general/browser.ini index eb5b5d08f02c..1e1b2e1ce52a 100644 --- a/browser/base/content/test/general/browser.ini +++ b/browser/base/content/test/general/browser.ini @@ -392,11 +392,11 @@ skip-if = buildapp == 'mulet' [browser_sanitizeDialog.js] skip-if = buildapp == 'mulet' [browser_save_link-perwindowpb.js] -skip-if = buildapp == 'mulet' || e10s # Bug 933103 - mochitest's EventUtils.synthesizeMouse functions not e10s friendly +skip-if = buildapp == 'mulet' [browser_save_private_link_perwindowpb.js] -skip-if = buildapp == 'mulet' || e10s # e10s: Bug 933103 - mochitest's EventUtils.synthesizeMouse functions not e10s friendly +skip-if = buildapp == 'mulet' [browser_save_link_when_window_navigates.js] -skip-if = buildapp == 'mulet' || e10s # Bug 933103 - mochitest's EventUtils.synthesizeMouse functions not e10s friendly +skip-if = buildapp == 'mulet' [browser_save_video.js] skip-if = buildapp == 'mulet' [browser_save_video_frame.js] diff --git a/browser/base/content/test/general/browser_save_link-perwindowpb.js b/browser/base/content/test/general/browser_save_link-perwindowpb.js index e40459e2228a..cecac05f7bf3 100644 --- a/browser/base/content/test/general/browser_save_link-perwindowpb.js +++ b/browser/base/content/test/general/browser_save_link-perwindowpb.js @@ -35,7 +35,7 @@ function triggerSave(aWindow, aCallback) { { type: "contextmenu", button: 2 }, testBrowser.contentWindow); info("right clicked!"); - }, testBrowser.contentWindow); + }, testBrowser); }, false); function contextMenuOpened(event) { diff --git a/browser/base/content/test/general/browser_save_private_link_perwindowpb.js b/browser/base/content/test/general/browser_save_private_link_perwindowpb.js index aee2d499f949..3973b1489411 100644 --- a/browser/base/content/test/general/browser_save_private_link_perwindowpb.js +++ b/browser/base/content/test/general/browser_save_private_link_perwindowpb.js @@ -106,7 +106,7 @@ function test() { EventUtils.synthesizeMouseAtCenter(img, { type: "contextmenu", button: 2 }, aWindow.gBrowser.contentWindow); - }, aWindow.gBrowser.selectedBrowser.contentWindow); + }, aWindow.gBrowser.selectedBrowser); }); } From 5782a0a117db3c796f86896b98b8a8e4d53da033 Mon Sep 17 00:00:00 2001 From: Sebastian Hengst Date: Sun, 28 Feb 2016 14:10:55 -0800 Subject: [PATCH 53/60] Bug 1251916 - Use standard JavaScript features in toolkit/components/passwordmgr to pass eslint checks: general, simple changes. r=MattN MozReview-Commit-ID: IdecwypP6on --HG-- extra : rebase_source : a943e1bf6cbc47e189372cc638d9d8d9d0e806f2 --- .../passwordmgr/LoginDoorhangers.jsm | 2 +- .../passwordmgr/LoginManagerContent.jsm | 20 ++- .../passwordmgr/content/passwordManager.js | 11 +- .../content/passwordManagerCommon.js | 2 +- .../content/passwordManagerExceptions.js | 11 +- toolkit/components/passwordmgr/crypto-SDR.js | 2 +- toolkit/components/passwordmgr/jar.mn | 4 +- toolkit/components/passwordmgr/moz.build | 2 +- .../components/passwordmgr/nsLoginManager.js | 12 +- .../passwordmgr/nsLoginManagerPrompter.js | 4 +- .../passwordmgr/storage-mozStorage.js | 2 +- .../passwordmgr/test/notification_common.js | 6 +- .../test/test_basic_form_autocomplete.html | 4 +- .../passwordmgr/test/test_bug_627616.html | 2 +- .../test/test_notifications_popup.html | 10 +- .../test/test_privbrowsing_perwindowpb.html | 18 +- .../passwordmgr/test/test_prompt_async.html | 29 ++-- .../test/unit/test_OSCrypto_win.js | 154 +++++++++--------- .../test/unit/test_notifications.js | 4 +- 19 files changed, 160 insertions(+), 139 deletions(-) diff --git a/toolkit/components/passwordmgr/LoginDoorhangers.jsm b/toolkit/components/passwordmgr/LoginDoorhangers.jsm index 1379ca0ce089..beec28078414 100644 --- a/toolkit/components/passwordmgr/LoginDoorhangers.jsm +++ b/toolkit/components/passwordmgr/LoginDoorhangers.jsm @@ -47,7 +47,7 @@ this.LoginDoorhangers.FillDoorhanger = function (properties) { let handler = handlers[eventName]; this.eventHandlers.push([elementName, eventName, handler.bind(this)]); } - }; + } for (let name of Object.getOwnPropertyNames(properties)) { this[name] = properties[name]; } diff --git a/toolkit/components/passwordmgr/LoginManagerContent.jsm b/toolkit/components/passwordmgr/LoginManagerContent.jsm index f5b87a6ea2e8..4d5f0e46ea7e 100644 --- a/toolkit/components/passwordmgr/LoginManagerContent.jsm +++ b/toolkit/components/passwordmgr/LoginManagerContent.jsm @@ -1184,7 +1184,7 @@ function UserAutoCompleteResult (aSearchString, matchingLogins) { return 1; return 0; - }; + } this.searchString = aSearchString; this.logins = matchingLogins.sort(loginSort); @@ -1323,12 +1323,18 @@ var FormLikeFactory = { let doc = aField.ownerDocument; log("Created non-form FormLike for rootElement:", doc.documentElement); + let elements = []; + for (let el of doc.documentElement.querySelectorAll("input")) { + if (!el.form) { + elements.push(el); + } + } let formLike = { action: LoginUtils._getPasswordOrigin(doc.baseURI), autocomplete: "on", // Exclude elements inside the rootElement that are already in a
    as // they will be handled by their own FormLike. - elements: [for (el of doc.documentElement.querySelectorAll("input")) if (!el.form) el], + elements, ownerDocument: doc, rootElement: doc.documentElement, }; @@ -1344,7 +1350,10 @@ var FormLikeFactory = { _addToJSONProperty(aFormLike) { function prettyElementOutput(aElement) { let idText = aElement.id ? "#" + aElement.id : ""; - let classText = [for (className of aElement.classList) "." + className].join(""); + let classText = ""; + for (let className of aElement.classList) { + classText += "." + className; + } return `<${aElement.nodeName + idText + classText}>`; } @@ -1357,7 +1366,10 @@ var FormLikeFactory = { switch (key) { case "elements": { - cleansedValue = [for (element of value) prettyElementOutput(element)]; + cleansedValue = []; + for (let element of value) { + cleansedValue.push(prettyElementOutput(element)); + } break; } diff --git a/toolkit/components/passwordmgr/content/passwordManager.js b/toolkit/components/passwordmgr/content/passwordManager.js index 45e65f9e494c..0d6cb81aafcd 100644 --- a/toolkit/components/passwordmgr/content/passwordManager.js +++ b/toolkit/components/passwordmgr/content/passwordManager.js @@ -4,6 +4,8 @@ /*** =================== SAVED SIGNONS CODE =================== ***/ +Cu.import("resource://gre/modules/AppConstants.jsm"); + var kSignonBundle; var showingPasswords = false; var dateFormatter = new Intl.DateTimeFormat(undefined, @@ -243,11 +245,10 @@ function HandleSignonKeyPress(e) { if (signonsTree.getAttribute("editing")) { return; } - if (e.keyCode == KeyEvent.DOM_VK_DELETE -#ifdef XP_MACOSX - || e.keyCode == KeyEvent.DOM_VK_BACK_SPACE -#endif - ) { + if (e.keyCode == KeyEvent.DOM_VK_DELETE || + (AppConstants.platform == "macosx" && + e.keyCode == KeyEvent.DOM_VK_BACK_SPACE)) + { DeleteSignon(); } } diff --git a/toolkit/components/passwordmgr/content/passwordManagerCommon.js b/toolkit/components/passwordmgr/content/passwordManagerCommon.js index 8d8485d450bf..ae1147f38417 100644 --- a/toolkit/components/passwordmgr/content/passwordManagerCommon.js +++ b/toolkit/components/passwordmgr/content/passwordManagerCommon.js @@ -87,7 +87,7 @@ function DeleteAllFromTree(tree, view, table, deletedTable, removeButton, remove table.length = 0; // clear out selections - view.selection.select(-1); + view.selection.select(-1); // update the tree view and notify the tree view.rowCount = 0; diff --git a/toolkit/components/passwordmgr/content/passwordManagerExceptions.js b/toolkit/components/passwordmgr/content/passwordManagerExceptions.js index 7569682e4d12..2ef580377b08 100644 --- a/toolkit/components/passwordmgr/content/passwordManagerExceptions.js +++ b/toolkit/components/passwordmgr/content/passwordManagerExceptions.js @@ -4,6 +4,8 @@ /*** =================== REJECTED SIGNONS CODE =================== ***/ +Components.utils.import("resource://gre/modules/AppConstants.jsm"); + function RejectsStartup() { LoadRejects(); @@ -89,11 +91,10 @@ function FinalizeRejectDeletions() { } function HandleRejectKeyPress(e) { - if (e.keyCode == KeyEvent.DOM_VK_DELETE -#ifdef XP_MACOSX - || e.keyCode == KeyEvent.DOM_VK_BACK_SPACE -#endif - ) { + if (e.keyCode == KeyEvent.DOM_VK_DELETE || + (AppConstants.platform == "macosx" && + e.keyCode == KeyEvent.DOM_VK_BACK_SPACE)) + { DeleteReject(); } } diff --git a/toolkit/components/passwordmgr/crypto-SDR.js b/toolkit/components/passwordmgr/crypto-SDR.js index 1ff6d4c780b4..b0916eb29157 100644 --- a/toolkit/components/passwordmgr/crypto-SDR.js +++ b/toolkit/components/passwordmgr/crypto-SDR.js @@ -12,7 +12,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "LoginHelper", function LoginManagerCrypto_SDR() { this.init(); -}; +} LoginManagerCrypto_SDR.prototype = { diff --git a/toolkit/components/passwordmgr/jar.mn b/toolkit/components/passwordmgr/jar.mn index 8ca3cdae12cf..1883d89f9cf0 100644 --- a/toolkit/components/passwordmgr/jar.mn +++ b/toolkit/components/passwordmgr/jar.mn @@ -6,8 +6,8 @@ toolkit.jar: % content passwordmgr %content/passwordmgr/ content/passwordmgr/login.xml (content/login.xml) * content/passwordmgr/passwordManager.xul (content/passwordManager.xul) -* content/passwordmgr/passwordManager.js (content/passwordManager.js) -* content/passwordmgr/passwordManagerExceptions.js (content/passwordManagerExceptions.js) + content/passwordmgr/passwordManager.js (content/passwordManager.js) + content/passwordmgr/passwordManagerExceptions.js (content/passwordManagerExceptions.js) content/passwordmgr/passwordManagerExceptions.xul (content/passwordManagerExceptions.xul) content/passwordmgr/passwordManagerCommon.js (content/passwordManagerCommon.js) content/passwordmgr/recipes.json (content/recipes.json) diff --git a/toolkit/components/passwordmgr/moz.build b/toolkit/components/passwordmgr/moz.build index be12314ea316..e04b230d0463 100644 --- a/toolkit/components/passwordmgr/moz.build +++ b/toolkit/components/passwordmgr/moz.build @@ -32,11 +32,11 @@ XPIDL_MODULE = 'loginmgr' EXTRA_COMPONENTS += [ 'crypto-SDR.js', 'nsLoginInfo.js', + 'nsLoginManager.js', 'nsLoginManagerPrompter.js', ] EXTRA_PP_COMPONENTS += [ - 'nsLoginManager.js', 'passwordmgr.manifest', ] diff --git a/toolkit/components/passwordmgr/nsLoginManager.js b/toolkit/components/passwordmgr/nsLoginManager.js index f3c8223b2349..03690c1a6e47 100644 --- a/toolkit/components/passwordmgr/nsLoginManager.js +++ b/toolkit/components/passwordmgr/nsLoginManager.js @@ -6,6 +6,7 @@ const { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components; +Cu.import("resource://gre/modules/AppConstants.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/Timer.jsm"); @@ -107,11 +108,12 @@ LoginManager.prototype = { _initStorage : function () { -#ifdef ANDROID - var contractID = "@mozilla.org/login-manager/storage/mozStorage;1"; -#else - var contractID = "@mozilla.org/login-manager/storage/json;1"; -#endif + var contractID; + if (AppConstants.platform == "android") { + contractID = "@mozilla.org/login-manager/storage/mozStorage;1"; + } else { + contractID = "@mozilla.org/login-manager/storage/json;1"; + } try { var catMan = Cc["@mozilla.org/categorymanager;1"]. getService(Ci.nsICategoryManager); diff --git a/toolkit/components/passwordmgr/nsLoginManagerPrompter.js b/toolkit/components/passwordmgr/nsLoginManagerPrompter.js index eb534443e80a..5813bdd02798 100644 --- a/toolkit/components/passwordmgr/nsLoginManagerPrompter.js +++ b/toolkit/components/passwordmgr/nsLoginManagerPrompter.js @@ -613,7 +613,7 @@ LoginManagerPrompter.prototype = { this.log("New login seen for " + username + " @ " + hostname + " (" + httpRealm + ")"); - var notifyObj = this._getPopupNote() || notifyBox; + let notifyObj = this._getPopupNote() || notifyBox; if (notifyObj) this._showSaveLoginNotification(notifyObj, newLogin); else @@ -623,7 +623,7 @@ LoginManagerPrompter.prototype = { this.log("Updating password for " + username + " @ " + hostname + " (" + httpRealm + ")"); - var notifyObj = this._getPopupNote() || notifyBox; + let notifyObj = this._getPopupNote() || notifyBox; if (notifyObj) this._showChangeLoginNotification(notifyObj, selectedLogin, newLogin); diff --git a/toolkit/components/passwordmgr/storage-mozStorage.js b/toolkit/components/passwordmgr/storage-mozStorage.js index 1065a495d61a..9aaf71666008 100644 --- a/toolkit/components/passwordmgr/storage-mozStorage.js +++ b/toolkit/components/passwordmgr/storage-mozStorage.js @@ -43,7 +43,7 @@ Transaction.prototype = { }; -function LoginManagerStorage_mozStorage() { }; +function LoginManagerStorage_mozStorage() { } LoginManagerStorage_mozStorage.prototype = { diff --git a/toolkit/components/passwordmgr/test/notification_common.js b/toolkit/components/passwordmgr/test/notification_common.js index 67357e6937a3..d9e3ac60c9ef 100644 --- a/toolkit/components/passwordmgr/test/notification_common.js +++ b/toolkit/components/passwordmgr/test/notification_common.js @@ -90,7 +90,7 @@ function dumpNotifications() { ok(true, "is popup panel open? " + container.isPanelOpen); var notes = container._currentNotifications; ok(true, "Found " + notes.length + " popup notifications."); - for (var i = 0; i < notes.length; i++) { + for (let i = 0; i < notes.length; i++) { ok(true, "#" + i + ": " + notes[i].id); } @@ -101,9 +101,9 @@ function dumpNotifications() { .QueryInterface(Ci.nsIDocShell) .chromeEventHandler.ownerDocument.defaultView; var nb = chromeWin.getNotificationBox(window.top); - var notes = nb.allNotifications; + notes = nb.allNotifications; ok(true, "Found " + notes.length + " notification bars."); - for (var i = 0; i < notes.length; i++) { + for (let i = 0; i < notes.length; i++) { ok(true, "#" + i + ": " + notes[i].getAttribute("value")); } } catch(e) { todo(false, "WOAH! " + e); } diff --git a/toolkit/components/passwordmgr/test/test_basic_form_autocomplete.html b/toolkit/components/passwordmgr/test/test_basic_form_autocomplete.html index e0ed82e59788..141a7cd92efe 100644 --- a/toolkit/components/passwordmgr/test/test_basic_form_autocomplete.html +++ b/toolkit/components/passwordmgr/test/test_basic_form_autocomplete.html @@ -717,7 +717,7 @@ function* runTest() { newField.setAttribute("type", "text"); newField.setAttribute("name", "uname2"); pword.parentNode.insertBefore(newField, pword); - is($_(7, "uname2").value, "", "Verifying empty uname2");; + is($_(7, "uname2").value, "", "Verifying empty uname2"); // Delete login6B. It was created just to prevent filling in a login // automatically, removing it makes it more likely that we'll catch a @@ -739,7 +739,7 @@ function* runTest() { // the password field should have any values filled in. yield spinEventLoop(); checkACForm("form7user1", ""); - is($_(7, "uname2").value, "", "Verifying empty uname2");; + is($_(7, "uname2").value, "", "Verifying empty uname2"); restoreForm(); // clear field, so reloading test doesn't fail pwmgr.removeLogin(login6A); diff --git a/toolkit/components/passwordmgr/test/test_bug_627616.html b/toolkit/components/passwordmgr/test/test_bug_627616.html index 84dc00f775a9..4e216ce933b3 100644 --- a/toolkit/components/passwordmgr/test/test_bug_627616.html +++ b/toolkit/components/passwordmgr/test/test_bug_627616.html @@ -65,7 +65,7 @@ } function cleanup() { var pwmgr = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager); - pwmgr.removeLogin(login); + pwmgr.removeLogin(login); pwmgr.removeLogin(login2); timer.cancel(); } diff --git a/toolkit/components/passwordmgr/test/test_notifications_popup.html b/toolkit/components/passwordmgr/test/test_notifications_popup.html index e9296000b6e6..e41abc837a9c 100644 --- a/toolkit/components/passwordmgr/test/test_notifications_popup.html +++ b/toolkit/components/passwordmgr/test/test_notifications_popup.html @@ -61,7 +61,7 @@ PasswordMgrObserver = { // Remember, Never for This Site, Not Now function checkTest() { - var popup, login, logins; + var popup, login, logins, popupWin, popupNotificationsInPopup; switch(testNum) { @@ -105,9 +105,9 @@ function checkTest() { login1.password = "notifyp1"; // password-save with chrome visible - var popupWin = iframe.contentWindow.popupWin; + popupWin = iframe.contentWindow.popupWin; ok(popupWin, "Check popupWin is accessible"); - var popupNotificationsInPopup = getPopupNotifications(popupWin); + popupNotificationsInPopup = getPopupNotifications(popupWin); ok(popupNotificationsInPopup, "Got popupNotificationsInPopup"); popup = getPopup(popupNotificationsInPopup, "password-save"); ok(popup, "got notification popup"); @@ -123,9 +123,9 @@ function checkTest() { ok(login.timesUsed, 1, "Check times used on new entry"); // password-change with chrome visible - var popupWin = iframe.contentWindow.popupWin; + popupWin = iframe.contentWindow.popupWin; ok(popupWin, "Check popupWin is accessible"); - var popupNotificationsInPopup = getPopupNotifications(popupWin); + popupNotificationsInPopup = getPopupNotifications(popupWin); ok(popupNotificationsInPopup, "Got popupNotificationsInPopup"); popup = getPopup(popupNotificationsInPopup, "password-change"); ok(popup, "got notification popup"); diff --git a/toolkit/components/passwordmgr/test/test_privbrowsing_perwindowpb.html b/toolkit/components/passwordmgr/test/test_privbrowsing_perwindowpb.html index efd26d4cc8e7..bd4000ed766b 100644 --- a/toolkit/components/passwordmgr/test/test_privbrowsing_perwindowpb.html +++ b/toolkit/components/passwordmgr/test/test_privbrowsing_perwindowpb.html @@ -110,6 +110,8 @@ function loadNextTest() { function checkTest() { var popup; + var gotUser; + var gotPass; switch (testNum) { case 1: @@ -155,32 +157,32 @@ function checkTest() { case 7: // verify that the user/pass pair was autofilled - var gotUser = iframe.contentDocument.getElementById("user").textContent; - var gotPass = iframe.contentDocument.getElementById("pass").textContent; + gotUser = iframe.contentDocument.getElementById("user").textContent; + gotPass = iframe.contentDocument.getElementById("pass").textContent; is(gotUser, "notifyu1", "Checking submitted username"); is(gotPass, "notifyp1", "Checking submitted password"); break; case 8: // verify that the user/pass pair was not autofilled - var gotUser = iframe.contentDocument.getElementById("user").textContent; - var gotPass = iframe.contentDocument.getElementById("pass").textContent; + gotUser = iframe.contentDocument.getElementById("user").textContent; + gotPass = iframe.contentDocument.getElementById("pass").textContent; is(gotUser, "", "Checking submitted username"); is(gotPass, "", "Checking submitted password"); break; case 9: // verify that the user/pass pair was available for autocomplete - var gotUser = iframe.contentDocument.getElementById("user").textContent; - var gotPass = iframe.contentDocument.getElementById("pass").textContent; + gotUser = iframe.contentDocument.getElementById("user").textContent; + gotPass = iframe.contentDocument.getElementById("pass").textContent; is(gotUser, "notifyu1", "Checking submitted username"); is(gotPass, "notifyp1", "Checking submitted password"); break; case 10: // verify that the user/pass pair was autofilled - var gotUser = iframe.contentDocument.getElementById("user").textContent; - var gotPass = iframe.contentDocument.getElementById("pass").textContent; + gotUser = iframe.contentDocument.getElementById("user").textContent; + gotPass = iframe.contentDocument.getElementById("pass").textContent; is(gotUser, "notifyu1", "Checking submitted username"); is(gotPass, "notifyp1", "Checking submitted password"); pwmgr.removeLogin(login); diff --git a/toolkit/components/passwordmgr/test/test_prompt_async.html b/toolkit/components/passwordmgr/test/test_prompt_async.html index d7fcb7ce2249..52417b8d815f 100644 --- a/toolkit/components/passwordmgr/test/test_prompt_async.html +++ b/toolkit/components/passwordmgr/test/test_prompt_async.html @@ -422,14 +422,17 @@ var iframe1Doc = SpecialPowers.wrap(iframe1).contentDocument; var iframe2aDoc = SpecialPowers.wrap(iframe2a).contentDocument; var iframe2bDoc = SpecialPowers.wrap(iframe2b).contentDocument; + var authok1; + var proxyok1; + var footnote; switch (testNum) { case 1: ok(true, "doCheck testNum 1"); is(monitor.windowsRegistered, 3, "Registered 3 open dialogs"); - var authok1 = iframe1Doc.getElementById("ok").textContent; - var proxyok1 = iframe1Doc.getElementById("proxy").textContent; + authok1 = iframe1Doc.getElementById("ok").textContent; + proxyok1 = iframe1Doc.getElementById("proxy").textContent; var authok2a = iframe2aDoc.getElementById("ok").textContent; var proxyok2a = iframe2aDoc.getElementById("proxy").textContent; @@ -475,8 +478,8 @@ case 4: ok(true, "doCheck testNum 4"); is(monitor.windowsRegistered, 2, "Registered 2 open dialogs"); - var authok1 = iframe1Doc.getElementById("ok").textContent; - var proxyok1 = iframe1Doc.getElementById("proxy").textContent; + authok1 = iframe1Doc.getElementById("ok").textContent; + proxyok1 = iframe1Doc.getElementById("proxy").textContent; is(authok1, "FAIL", "WWW Authorization FAILED, frame1"); is(proxyok1, "PASS", "Proxy Authorization OK, frame1"); @@ -493,9 +496,9 @@ case 6: ok(true, "doCheck testNum 6"); is(monitor.windowsRegistered, 2, "Registered 2 open dialogs"); - var authok1 = iframe1Doc.getElementById("ok").textContent; - var proxyok1 = iframe1Doc.getElementById("proxy").textContent; - var footnote = iframe1Doc.getElementById("footnote").textContent; + authok1 = iframe1Doc.getElementById("ok").textContent; + proxyok1 = iframe1Doc.getElementById("proxy").textContent; + footnote = iframe1Doc.getElementById("footnote").textContent; is(authok1, "FAIL", "WWW Authorization FAILED, frame1"); is(proxyok1, "PASS", "Proxy Authorization OK, frame1"); @@ -506,9 +509,9 @@ case 7: ok(true, "doCheck testNum 7"); is(monitor.windowsRegistered, 1, "Registered 1 open dialogs"); - var authok1 = iframe1Doc.getElementById("ok").textContent; - var proxyok1 = iframe1Doc.getElementById("proxy").textContent; - var footnote = iframe1Doc.getElementById("footnote").textContent; + authok1 = iframe1Doc.getElementById("ok").textContent; + proxyok1 = iframe1Doc.getElementById("proxy").textContent; + footnote = iframe1Doc.getElementById("footnote").textContent; is(authok1, "PASS", "WWW Authorization OK, frame1"); is(proxyok1, "PASS", "Proxy Authorization OK, frame1"); @@ -519,9 +522,9 @@ case 8: ok(true, "doCheck testNum 8"); is(monitor.windowsRegistered, 5, "Registered 5 open dialogs"); - var authok1 = iframe1Doc.getElementById("ok").textContent; - var proxyok1 = iframe1Doc.getElementById("proxy").textContent; - var footnote = iframe1Doc.getElementById("footnote").textContent; + authok1 = iframe1Doc.getElementById("ok").textContent; + proxyok1 = iframe1Doc.getElementById("proxy").textContent; + footnote = iframe1Doc.getElementById("footnote").textContent; is(authok1, "PASS", "WWW Authorization OK, frame1"); is(proxyok1, "PASS", "Proxy Authorization OK, frame1"); diff --git a/toolkit/components/passwordmgr/test/unit/test_OSCrypto_win.js b/toolkit/components/passwordmgr/test/unit/test_OSCrypto_win.js index b57ae801509c..d6f96051fcf7 100644 --- a/toolkit/components/passwordmgr/test/unit/test_OSCrypto_win.js +++ b/toolkit/components/passwordmgr/test/unit/test_OSCrypto_win.js @@ -1,77 +1,77 @@ -/** - * Tests the OSCrypto object. - */ - -"use strict"; - -//////////////////////////////////////////////////////////////////////////////// -//// Globals - -XPCOMUtils.defineLazyModuleGetter(this, "OSCrypto", - "resource://gre/modules/OSCrypto.jsm"); - -var crypto = new OSCrypto(); - -//////////////////////////////////////////////////////////////////////////////// -//// Tests - -add_task(function test_getIELoginHash() -{ - do_check_eq(crypto.getIELoginHash("https://bugzilla.mozilla.org/page.cgi"), - "4A66FE96607885790F8E67B56EEE52AB539BAFB47D"); - - do_check_eq(crypto.getIELoginHash("https://github.com/login"), - "0112F7DCE67B8579EA01367678AA44AB9868B5A143"); - - do_check_eq(crypto.getIELoginHash("https://login.live.com/login.srf"), - "FBF92E5D804C82717A57856533B779676D92903688"); - - do_check_eq(crypto.getIELoginHash("https://preview.c9.io/riadh/w1/pass.1.html"), - "6935CF27628830605927F86AB53831016FC8973D1A"); - - - do_check_eq(crypto.getIELoginHash("https://reviewboard.mozilla.org/account/login/"), - "09141FD287E2E59A8B1D3BB5671537FD3D6B61337A"); - - do_check_eq(crypto.getIELoginHash("https://www.facebook.com/"), - "EF44D3E034009CB0FD1B1D81A1FF3F3335213BD796"); - -}); - -add_task(function test_decryptData_encryptData() -{ - function decryptEncryptTest(key) { - do_check_eq(crypto.decryptData(crypto.encryptData("", key), key), - ""); - - do_check_eq(crypto.decryptData(crypto.encryptData("secret", key), key), - "secret"); - - do_check_eq(crypto.decryptData(crypto.encryptData("https://www.mozilla.org", key), - key), - "https://www.mozilla.org"); - - do_check_eq(crypto.decryptData(crypto.encryptData("https://reviewboard.mozilla.org", key), - key), - "https://reviewboard.mozilla.org"); - - do_check_eq(crypto.decryptData(crypto.encryptData("https://bugzilla.mozilla.org/page.cgi", - key), - key), - "https://bugzilla.mozilla.org/page.cgi"); - } - - let keys = [null, "a", "keys", "abcdedf", "pass", "https://bugzilla.mozilla.org/page.cgi", - "https://login.live.com/login.srf"]; - for (let key of keys) { - decryptEncryptTest(key); - } - let url = "https://twitter.com/"; - let value = [1, 0, 0, 0, 208, 140, 157, 223, 1, 21, 209, 17, 140, 122, 0, 192, 79, 194, 151, 235, 1, 0, 0, 0, 254, 58, 230, 75, 132, 228, 181, 79, 184, 160, 37, 106, 201, 29, 42, 152, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 16, 102, 0, 0, 0, 1, 0, 0, 32, 0, 0, 0, 90, 136, 17, 124, 122, 57, 178, 24, 34, 86, 209, 198, 184, 107, 58, 58, 32, 98, 61, 239, 129, 101, 56, 239, 114, 159, 139, 165, 183, 40, 183, 85, 0, 0, 0, 0, 14, 128, 0, 0, 0, 2, 0, 0, 32, 0, 0, 0, 147, 170, 34, 21, 53, 227, 191, 6, 201, 84, 106, 31, 57, 227, 46, 127, 219, 199, 80, 142, 37, 104, 112, 223, 26, 165, 223, 55, 176, 89, 55, 37, 112, 0, 0, 0, 98, 70, 221, 109, 5, 152, 46, 11, 190, 213, 226, 58, 244, 20, 180, 217, 63, 155, 227, 132, 7, 151, 235, 6, 37, 232, 176, 182, 141, 191, 251, 50, 20, 123, 53, 11, 247, 233, 112, 121, 130, 27, 168, 68, 92, 144, 192, 7, 12, 239, 53, 217, 253, 155, 54, 109, 236, 216, 225, 245, 79, 234, 165, 225, 104, 36, 77, 13, 195, 237, 143, 165, 100, 107, 230, 70, 54, 19, 179, 35, 8, 101, 93, 202, 121, 210, 222, 28, 93, 122, 36, 84, 185, 249, 238, 3, 102, 149, 248, 94, 137, 16, 192, 22, 251, 220, 22, 223, 16, 58, 104, 187, 64, 0, 0, 0, 70, 72, 15, 119, 144, 66, 117, 203, 190, 82, 131, 46, 111, 130, 238, 191, 170, 63, 186, 117, 46, 88, 171, 3, 94, 146, 75, 86, 243, 159, 63, 195, 149, 25, 105, 141, 42, 217, 108, 18, 63, 62, 98, 182, 241, 195, 12, 216, 152, 230, 176, 253, 202, 129, 41, 185, 135, 111, 226, 92, 27, 78, 27, 198]; - - let arr1 = crypto.arrayToString(value) - let arr2 = crypto.stringToArray(crypto.decryptData(crypto.encryptData(arr1, url), url)); - for(let i = 0; i < arr1.length; i++) { - do_check_eq(arr2[i], value[i]); - } -}); +/** + * Tests the OSCrypto object. + */ + +"use strict"; + +//////////////////////////////////////////////////////////////////////////////// +//// Globals + +XPCOMUtils.defineLazyModuleGetter(this, "OSCrypto", + "resource://gre/modules/OSCrypto.jsm"); + +var crypto = new OSCrypto(); + +//////////////////////////////////////////////////////////////////////////////// +//// Tests + +add_task(function test_getIELoginHash() +{ + do_check_eq(crypto.getIELoginHash("https://bugzilla.mozilla.org/page.cgi"), + "4A66FE96607885790F8E67B56EEE52AB539BAFB47D"); + + do_check_eq(crypto.getIELoginHash("https://github.com/login"), + "0112F7DCE67B8579EA01367678AA44AB9868B5A143"); + + do_check_eq(crypto.getIELoginHash("https://login.live.com/login.srf"), + "FBF92E5D804C82717A57856533B779676D92903688"); + + do_check_eq(crypto.getIELoginHash("https://preview.c9.io/riadh/w1/pass.1.html"), + "6935CF27628830605927F86AB53831016FC8973D1A"); + + + do_check_eq(crypto.getIELoginHash("https://reviewboard.mozilla.org/account/login/"), + "09141FD287E2E59A8B1D3BB5671537FD3D6B61337A"); + + do_check_eq(crypto.getIELoginHash("https://www.facebook.com/"), + "EF44D3E034009CB0FD1B1D81A1FF3F3335213BD796"); + +}); + +add_task(function test_decryptData_encryptData() +{ + function decryptEncryptTest(key) { + do_check_eq(crypto.decryptData(crypto.encryptData("", key), key), + ""); + + do_check_eq(crypto.decryptData(crypto.encryptData("secret", key), key), + "secret"); + + do_check_eq(crypto.decryptData(crypto.encryptData("https://www.mozilla.org", key), + key), + "https://www.mozilla.org"); + + do_check_eq(crypto.decryptData(crypto.encryptData("https://reviewboard.mozilla.org", key), + key), + "https://reviewboard.mozilla.org"); + + do_check_eq(crypto.decryptData(crypto.encryptData("https://bugzilla.mozilla.org/page.cgi", + key), + key), + "https://bugzilla.mozilla.org/page.cgi"); + } + + let keys = [null, "a", "keys", "abcdedf", "pass", "https://bugzilla.mozilla.org/page.cgi", + "https://login.live.com/login.srf"]; + for (let key of keys) { + decryptEncryptTest(key); + } + let url = "https://twitter.com/"; + let value = [1, 0, 0, 0, 208, 140, 157, 223, 1, 21, 209, 17, 140, 122, 0, 192, 79, 194, 151, 235, 1, 0, 0, 0, 254, 58, 230, 75, 132, 228, 181, 79, 184, 160, 37, 106, 201, 29, 42, 152, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 16, 102, 0, 0, 0, 1, 0, 0, 32, 0, 0, 0, 90, 136, 17, 124, 122, 57, 178, 24, 34, 86, 209, 198, 184, 107, 58, 58, 32, 98, 61, 239, 129, 101, 56, 239, 114, 159, 139, 165, 183, 40, 183, 85, 0, 0, 0, 0, 14, 128, 0, 0, 0, 2, 0, 0, 32, 0, 0, 0, 147, 170, 34, 21, 53, 227, 191, 6, 201, 84, 106, 31, 57, 227, 46, 127, 219, 199, 80, 142, 37, 104, 112, 223, 26, 165, 223, 55, 176, 89, 55, 37, 112, 0, 0, 0, 98, 70, 221, 109, 5, 152, 46, 11, 190, 213, 226, 58, 244, 20, 180, 217, 63, 155, 227, 132, 7, 151, 235, 6, 37, 232, 176, 182, 141, 191, 251, 50, 20, 123, 53, 11, 247, 233, 112, 121, 130, 27, 168, 68, 92, 144, 192, 7, 12, 239, 53, 217, 253, 155, 54, 109, 236, 216, 225, 245, 79, 234, 165, 225, 104, 36, 77, 13, 195, 237, 143, 165, 100, 107, 230, 70, 54, 19, 179, 35, 8, 101, 93, 202, 121, 210, 222, 28, 93, 122, 36, 84, 185, 249, 238, 3, 102, 149, 248, 94, 137, 16, 192, 22, 251, 220, 22, 223, 16, 58, 104, 187, 64, 0, 0, 0, 70, 72, 15, 119, 144, 66, 117, 203, 190, 82, 131, 46, 111, 130, 238, 191, 170, 63, 186, 117, 46, 88, 171, 3, 94, 146, 75, 86, 243, 159, 63, 195, 149, 25, 105, 141, 42, 217, 108, 18, 63, 62, 98, 182, 241, 195, 12, 216, 152, 230, 176, 253, 202, 129, 41, 185, 135, 111, 226, 92, 27, 78, 27, 198]; + + let arr1 = crypto.arrayToString(value) + let arr2 = crypto.stringToArray(crypto.decryptData(crypto.encryptData(arr1, url), url)); + for(let i = 0; i < arr1.length; i++) { + do_check_eq(arr2[i], value[i]); + } +}); diff --git a/toolkit/components/passwordmgr/test/unit/test_notifications.js b/toolkit/components/passwordmgr/test/unit/test_notifications.js index 3b6ef830c3ad..d38ff95efa24 100644 --- a/toolkit/components/passwordmgr/test/unit/test_notifications.js +++ b/toolkit/components/passwordmgr/test/unit/test_notifications.js @@ -66,8 +66,8 @@ Services.obs.addObserver(TestObserver, "passwordmgr-storage-changed", false); /* ========== 1 ========== */ -var testnum = 1; -var testdesc = "Initial connection to storage module" +testnum = 1; +testdesc = "Initial connection to storage module" /* ========== 2 ========== */ testnum++; From 3427f91e14f01da9899ed2339e6954cfb90e9b3a Mon Sep 17 00:00:00 2001 From: Sebastian Hengst Date: Sun, 28 Feb 2016 14:11:17 -0800 Subject: [PATCH 54/60] Bug 1251916 - Use standard JavaScript features in toolkit/components/passwordmgr to pass eslint checks: replace legacy generators with ES6 generators. r=MattN MozReview-Commit-ID: KxMSovx0mfl --HG-- extra : rebase_source : 4b033e20af1efca9e6d16e0764a33a0f264f645f --- toolkit/components/passwordmgr/LoginStore.jsm | 4 +-- .../components/passwordmgr/nsLoginManager.js | 2 +- .../components/passwordmgr/storage-json.js | 2 +- .../passwordmgr/test/LoginTestUtils.jsm | 2 +- .../components/passwordmgr/test/unit/head.js | 2 +- .../test/unit/test_disabled_hosts.js | 4 +-- .../test/unit/test_logins_metainfo.js | 4 +-- .../test/unit/test_module_LoginImport.js | 10 +++--- .../test/unit/test_module_LoginStore.js | 12 +++---- .../passwordmgr/test/unit/test_storage.js | 22 ++++++------ .../test/unit/test_storage_mozStorage.js | 36 +++++++++---------- 11 files changed, 50 insertions(+), 50 deletions(-) diff --git a/toolkit/components/passwordmgr/LoginStore.jsm b/toolkit/components/passwordmgr/LoginStore.jsm index f40c19207902..f21b5e45e110 100644 --- a/toolkit/components/passwordmgr/LoginStore.jsm +++ b/toolkit/components/passwordmgr/LoginStore.jsm @@ -160,7 +160,7 @@ LoginStore.prototype = { */ load: function () { - return Task.spawn(function () { + return Task.spawn(function* () { try { let bytes = yield OS.File.read(this.path); @@ -302,7 +302,7 @@ LoginStore.prototype = { */ save: function () { - return Task.spawn(function () { + return Task.spawn(function* () { // Create or overwrite the file. let bytes = gTextEncoder.encode(JSON.stringify(this.data)); yield OS.File.writeAtomic(this.path, bytes, diff --git a/toolkit/components/passwordmgr/nsLoginManager.js b/toolkit/components/passwordmgr/nsLoginManager.js index 03690c1a6e47..6d3441924d0e 100644 --- a/toolkit/components/passwordmgr/nsLoginManager.js +++ b/toolkit/components/passwordmgr/nsLoginManager.js @@ -164,7 +164,7 @@ LoginManager.prototype = { delete this._pwmgr._prefBranch; this._pwmgr = null; } else if (topic == "passwordmgr-storage-replace") { - Task.spawn(function () { + Task.spawn(function* () { yield this._pwmgr._storage.terminate(); this._pwmgr._initStorage(); yield this._pwmgr.initializationPromise; diff --git a/toolkit/components/passwordmgr/storage-json.js b/toolkit/components/passwordmgr/storage-json.js index bb7b7e6f9dcc..4218b461bec7 100644 --- a/toolkit/components/passwordmgr/storage-json.js +++ b/toolkit/components/passwordmgr/storage-json.js @@ -52,7 +52,7 @@ this.LoginManagerStorage_json.prototype = { "logins.json"); this._store = new LoginStore(jsonPath); - return Task.spawn(function () { + return Task.spawn(function* () { // Load the data asynchronously. this.log("Opening database at", this._store.path); yield this._store.load(); diff --git a/toolkit/components/passwordmgr/test/LoginTestUtils.jsm b/toolkit/components/passwordmgr/test/LoginTestUtils.jsm index eec947369f6c..d7f4cb5f6a0a 100644 --- a/toolkit/components/passwordmgr/test/LoginTestUtils.jsm +++ b/toolkit/components/passwordmgr/test/LoginTestUtils.jsm @@ -36,7 +36,7 @@ this.LoginTestUtils = { * Forces the storage module to save all data, and the Login Manager service * to replace the storage module with a newly initialized instance. */ - reloadData() { + * reloadData() { Services.obs.notifyObservers(null, "passwordmgr-storage-replace", null); yield TestUtils.topicObserved("passwordmgr-storage-replace-complete"); }, diff --git a/toolkit/components/passwordmgr/test/unit/head.js b/toolkit/components/passwordmgr/test/unit/head.js index b95e369b9ac2..9d85e2b5377b 100644 --- a/toolkit/components/passwordmgr/test/unit/head.js +++ b/toolkit/components/passwordmgr/test/unit/head.js @@ -165,7 +165,7 @@ const MockDocument = { //// Initialization functions common to all tests -add_task(function test_common_initialize() +add_task(function* test_common_initialize() { // Before initializing the service for the first time, we should copy the key // file required to decrypt the logins contained in the SQLite databases used diff --git a/toolkit/components/passwordmgr/test/unit/test_disabled_hosts.js b/toolkit/components/passwordmgr/test/unit/test_disabled_hosts.js index cbd68fa7c8d5..4ec97be54ab2 100644 --- a/toolkit/components/passwordmgr/test/unit/test_disabled_hosts.js +++ b/toolkit/components/passwordmgr/test/unit/test_disabled_hosts.js @@ -145,12 +145,12 @@ add_task(function test_rememberSignons() /** * Tests storing disabled hosts containing non-ASCII characters. */ -add_task(function test_storage_setLoginSavingEnabled_nonascii() +add_task(function* test_storage_setLoginSavingEnabled_nonascii() { let hostname = "http://" + String.fromCharCode(355) + ".example.com"; Services.logins.setLoginSavingEnabled(hostname, false); - yield LoginTestUtils.reloadData(); + yield* LoginTestUtils.reloadData(); LoginTestUtils.assertDisabledHostsEqual(Services.logins.getAllDisabledHosts(), [hostname]); LoginTestUtils.clearData(); diff --git a/toolkit/components/passwordmgr/test/unit/test_logins_metainfo.js b/toolkit/components/passwordmgr/test/unit/test_logins_metainfo.js index 73ec6d2b1970..b3397bb81609 100644 --- a/toolkit/components/passwordmgr/test/unit/test_logins_metainfo.js +++ b/toolkit/components/passwordmgr/test/unit/test_logins_metainfo.js @@ -275,9 +275,9 @@ add_task(function test_searchLogins_metainfo() * Tests that the default nsILoginManagerStorage module attached to the Login * Manager service is able to save and reload nsILoginMetaInfo properties. */ -add_task(function test_storage_metainfo() +add_task(function* test_storage_metainfo() { - yield LoginTestUtils.reloadData(); + yield* LoginTestUtils.reloadData(); LoginTestUtils.checkLogins([gLoginInfo1, gLoginInfo2, gLoginInfo3]); assertMetaInfoEqual(retrieveLoginMatching(gLoginInfo1), gLoginMetaInfo1); diff --git a/toolkit/components/passwordmgr/test/unit/test_module_LoginImport.js b/toolkit/components/passwordmgr/test/unit/test_module_LoginImport.js index 77cfe72bf7be..4897baebacc9 100644 --- a/toolkit/components/passwordmgr/test/unit/test_module_LoginImport.js +++ b/toolkit/components/passwordmgr/test/unit/test_module_LoginImport.js @@ -36,7 +36,7 @@ XPCOMUtils.defineLazyServiceGetter(this, "gUUIDGenerator", */ function promiseCreateDatabaseSchema(aConnection) { - return Task.spawn(function () { + return Task.spawn(function* () { yield aConnection.setSchemaVersion(5); yield aConnection.execute("CREATE TABLE moz_logins (" + "id INTEGER PRIMARY KEY," + @@ -113,7 +113,7 @@ function promiseInsertDisabledHost(aConnection, aHostname) /** * Imports login data from a SQLite file constructed using the test data. */ -add_task(function test_import() +add_task(function* test_import() { let store = new LoginStore(getTempFile("test-import.json").path); let loginsSqlite = getTempFile("test-logins.sqlite").path; @@ -177,7 +177,7 @@ add_task(function test_import() /** * Tests imports of NULL values due to a downgraded database. */ -add_task(function test_import_downgraded() +add_task(function* test_import_downgraded() { let store = new LoginStore(getTempFile("test-import-downgraded.json").path); let loginsSqlite = getTempFile("test-logins-downgraded.sqlite").path; @@ -215,7 +215,7 @@ add_task(function test_import_downgraded() /** * Verifies that importing from a SQLite file with database version 2 fails. */ -add_task(function test_import_v2() +add_task(function* test_import_v2() { let store = new LoginStore(getTempFile("test-import-v2.json").path); let loginsSqlite = do_get_file("data/signons-v2.sqlite").path; @@ -231,7 +231,7 @@ add_task(function test_import_v2() /** * Imports login data from a SQLite file, with database version 3. */ -add_task(function test_import_v3() +add_task(function* test_import_v3() { let store = new LoginStore(getTempFile("test-import-v3.json").path); let loginsSqlite = do_get_file("data/signons-v3.sqlite").path; diff --git a/toolkit/components/passwordmgr/test/unit/test_module_LoginStore.js b/toolkit/components/passwordmgr/test/unit/test_module_LoginStore.js index 5a49d80662f4..ea156d420d1b 100644 --- a/toolkit/components/passwordmgr/test/unit/test_module_LoginStore.js +++ b/toolkit/components/passwordmgr/test/unit/test_module_LoginStore.js @@ -23,7 +23,7 @@ const TEST_STORE_FILE_NAME = "test-logins.json"; /** * Saves login data to a file, then reloads it. */ -add_task(function test_save_reload() +add_task(function* test_save_reload() { let storeForSave = new LoginStore(getTempFile(TEST_STORE_FILE_NAME).path); @@ -74,7 +74,7 @@ add_task(function test_save_reload() /** * Checks that loading from a missing file results in empty arrays. */ -add_task(function test_load_empty() +add_task(function* test_load_empty() { let store = new LoginStore(getTempFile(TEST_STORE_FILE_NAME).path); @@ -91,7 +91,7 @@ add_task(function test_load_empty() /** * Checks that saving empty data still overwrites any existing file. */ -add_task(function test_save_empty() +add_task(function* test_save_empty() { let store = new LoginStore(getTempFile(TEST_STORE_FILE_NAME).path); @@ -109,7 +109,7 @@ add_task(function test_save_empty() * Loads data from a string in a predefined format. The purpose of this test is * to verify that the JSON format used in previous versions can be loaded. */ -add_task(function test_load_string_predefined() +add_task(function* test_load_string_predefined() { let store = new LoginStore(getTempFile(TEST_STORE_FILE_NAME).path); @@ -161,7 +161,7 @@ add_task(function test_load_string_predefined() /** * Loads login data from a malformed JSON string. */ -add_task(function test_load_string_malformed() +add_task(function* test_load_string_malformed() { let store = new LoginStore(getTempFile(TEST_STORE_FILE_NAME).path); @@ -186,7 +186,7 @@ add_task(function test_load_string_malformed() * Loads login data from a malformed JSON string, using the synchronous * initialization path. */ -add_task(function test_load_string_malformed_sync() +add_task(function* test_load_string_malformed_sync() { let store = new LoginStore(getTempFile(TEST_STORE_FILE_NAME).path); diff --git a/toolkit/components/passwordmgr/test/unit/test_storage.js b/toolkit/components/passwordmgr/test/unit/test_storage.js index 2b40ad53c386..e5dbc75a2392 100644 --- a/toolkit/components/passwordmgr/test/unit/test_storage.js +++ b/toolkit/components/passwordmgr/test/unit/test_storage.js @@ -14,7 +14,7 @@ //////////////////////////////////////////////////////////////////////////////// //// Globals -function reloadAndCheckLogins(aExpectedLogins) +function* reloadAndCheckLoginsGen(aExpectedLogins) { yield LoginTestUtils.reloadData(); LoginTestUtils.checkLogins(aExpectedLogins); @@ -27,7 +27,7 @@ function reloadAndCheckLogins(aExpectedLogins) /** * Tests addLogin with valid non-ASCII characters. */ -add_task(function test_storage_addLogin_nonascii() +add_task(function* test_storage_addLogin_nonascii() { let hostname = "http://" + String.fromCharCode(355) + ".example.com"; @@ -41,27 +41,27 @@ add_task(function test_storage_addLogin_nonascii() passwordField: "field_" + String.fromCharCode(421, 259, 349, 537), }); Services.logins.addLogin(loginInfo); - yield reloadAndCheckLogins([loginInfo]); + yield* reloadAndCheckLoginsGen([loginInfo]); // Store the string "test" using similarly looking glyphs. loginInfo = TestData.authLogin({ httpRealm: String.fromCharCode(355, 277, 349, 357), }); Services.logins.addLogin(loginInfo); - yield reloadAndCheckLogins([loginInfo]); + yield* reloadAndCheckLoginsGen([loginInfo]); }); /** * Tests addLogin with newline characters in the username and password. */ -add_task(function test_storage_addLogin_newlines() +add_task(function* test_storage_addLogin_newlines() { let loginInfo = TestData.formLogin({ username: "user\r\nname", password: "password\r\n", }); Services.logins.addLogin(loginInfo); - yield reloadAndCheckLogins([loginInfo]); + yield* reloadAndCheckLoginsGen([loginInfo]); }); /** @@ -69,15 +69,15 @@ add_task(function test_storage_addLogin_newlines() * * These tests exist to verify the legacy "signons.txt" storage format. */ -add_task(function test_storage_addLogin_dot() +add_task(function* test_storage_addLogin_dot() { let loginInfo = TestData.formLogin({ hostname: ".", passwordField: "." }); Services.logins.addLogin(loginInfo); - yield reloadAndCheckLogins([loginInfo]); + yield* reloadAndCheckLoginsGen([loginInfo]); loginInfo = TestData.authLogin({ httpRealm: "." }); Services.logins.addLogin(loginInfo); - yield reloadAndCheckLogins([loginInfo]); + yield* reloadAndCheckLoginsGen([loginInfo]); }); /** @@ -85,7 +85,7 @@ add_task(function test_storage_addLogin_dot() * * These tests exist to verify the legacy "signons.txt" storage format. */ -add_task(function test_storage_addLogin_parentheses() +add_task(function* test_storage_addLogin_parentheses() { let loginList = [ TestData.authLogin({ httpRealm: "(realm" }), @@ -100,5 +100,5 @@ add_task(function test_storage_addLogin_parentheses() for (let loginInfo of loginList) { Services.logins.addLogin(loginInfo); } - yield reloadAndCheckLogins(loginList); + yield* reloadAndCheckLoginsGen(loginList); }); diff --git a/toolkit/components/passwordmgr/test/unit/test_storage_mozStorage.js b/toolkit/components/passwordmgr/test/unit/test_storage_mozStorage.js index 3356570bdb60..a7fafb57957a 100644 --- a/toolkit/components/passwordmgr/test/unit/test_storage_mozStorage.js +++ b/toolkit/components/passwordmgr/test/unit/test_storage_mozStorage.js @@ -11,11 +11,11 @@ const ENCTYPE_SDR = 1; // kept in sync with the version there (or else the tests fail). const CURRENT_SCHEMA = 5; -function copyFile(aLeafName) +function* copyFile(aLeafName) { yield OS.File.copy(OS.Path.join(do_get_file("data").path, aLeafName), OS.Path.join(OS.Constants.Path.profileDir, aLeafName)); -}; +} function openDB(aLeafName) { @@ -23,7 +23,7 @@ function openDB(aLeafName) dbFile.append(aLeafName); return Services.storage.openDatabase(dbFile); -}; +} function deleteFile(pathname, filename) { @@ -37,13 +37,13 @@ function deleteFile(pathname, filename) if (file.exists()) file.remove(false); } catch (e) {} -}; +} function reloadStorage(aInputPathName, aInputFileName) { var inputFile = null; if (aInputFileName) { - var inputFile = Cc["@mozilla.org/file/local;1"]. + inputFile = Cc["@mozilla.org/file/local;1"]. createInstance(Ci.nsILocalFile); inputFile.initWithPath(aInputPathName); inputFile.append(aInputFileName); @@ -56,16 +56,16 @@ function reloadStorage(aInputPathName, aInputFileName) .initWithFile(inputFile); return storage; -}; +} function checkStorageData(storage, ref_disabledHosts, ref_logins) { LoginTestUtils.assertLoginListsEqual(storage.getAllLogins(), ref_logins); LoginTestUtils.assertDisabledHostsEqual(storage.getAllDisabledHosts(), ref_disabledHosts); -}; +} -add_task(function test_execute() +add_task(function* test_execute() { const OUTDIR = OS.Constants.Path.profileDir; @@ -122,7 +122,7 @@ testuser5.init("http://test.gov", "http://test.gov", null, testnum++; testdesc = "Test downgrade from v999 storage" -yield copyFile("signons-v999.sqlite"); +yield* copyFile("signons-v999.sqlite"); // Verify the schema version in the test file. dbConnection = openDB("signons-v999.sqlite"); do_check_eq(999, dbConnection.schemaVersion); @@ -147,7 +147,7 @@ var origFile = OS.Path.join(OUTDIR, "signons-v999-2.sqlite"); var failFile = OS.Path.join(OUTDIR, "signons-v999-2.sqlite.corrupt"); // Make sure we always start clean in a clean state. -yield copyFile("signons-v999-2.sqlite"); +yield* copyFile("signons-v999-2.sqlite"); yield OS.File.remove(failFile); Assert.throws(() => reloadStorage(OUTDIR, "signons-v999-2.sqlite"), @@ -163,7 +163,7 @@ yield OS.File.remove(failFile); testnum++; testdesc = "Test upgrade from v1->v2 storage" -yield copyFile("signons-v1.sqlite"); +yield* copyFile("signons-v1.sqlite"); // Sanity check the test file. dbConnection = openDB("signons-v1.sqlite"); do_check_eq(1, dbConnection.schemaVersion); @@ -190,7 +190,7 @@ testdesc = "Test upgrade v2->v1 storage"; // are upgrading it again. Any logins added by the v1 code must be properly // upgraded. -yield copyFile("signons-v1v2.sqlite"); +yield* copyFile("signons-v1v2.sqlite"); // Sanity check the test file. dbConnection = openDB("signons-v1v2.sqlite"); do_check_eq(1, dbConnection.schemaVersion); @@ -222,7 +222,7 @@ deleteFile(OUTDIR, "signons-v1v2.sqlite"); testnum++; testdesc = "Test upgrade from v2->v3 storage" -yield copyFile("signons-v2.sqlite"); +yield* copyFile("signons-v2.sqlite"); // Sanity check the test file. dbConnection = openDB("signons-v2.sqlite"); do_check_eq(2, dbConnection.schemaVersion); @@ -250,7 +250,7 @@ testdesc = "Test upgrade v3->v2 storage"; // are upgrading it again. Any logins added by the v2 code must be properly // upgraded. -yield copyFile("signons-v2v3.sqlite"); +yield* copyFile("signons-v2v3.sqlite"); // Sanity check the test file. dbConnection = openDB("signons-v2v3.sqlite"); do_check_eq(2, dbConnection.schemaVersion); @@ -282,7 +282,7 @@ deleteFile(OUTDIR, "signons-v2v3.sqlite"); testnum++; testdesc = "Test upgrade from v3->v4 storage" -yield copyFile("signons-v3.sqlite"); +yield* copyFile("signons-v3.sqlite"); // Sanity check the test file. dbConnection = openDB("signons-v3.sqlite"); do_check_eq(3, dbConnection.schemaVersion); @@ -306,7 +306,7 @@ for (var i = 0; i < 2; i++) { testnum++; testdesc = "Test upgrade from v3->v4->v3 storage" -yield copyFile("signons-v3v4.sqlite"); +yield* copyFile("signons-v3v4.sqlite"); // Sanity check the test file. dbConnection = openDB("signons-v3v4.sqlite"); do_check_eq(3, dbConnection.schemaVersion); @@ -317,7 +317,7 @@ do_check_eq(CURRENT_SCHEMA, dbConnection.schemaVersion); // testuser1 already has timestamps, testuser2 does not. checkStorageData(storage, [], [testuser1, testuser2]); -var logins = storage.getAllLogins(); +logins = storage.getAllLogins(); var t1, t2; if (logins[0].username == "testuser1") { @@ -346,7 +346,7 @@ LoginTestUtils.assertTimeIsAboutNow(t2.timePasswordChanged); testnum++; testdesc = "Test upgrade from v4 storage" -yield copyFile("signons-v4.sqlite"); +yield* copyFile("signons-v4.sqlite"); // Sanity check the test file. dbConnection = openDB("signons-v4.sqlite"); do_check_eq(4, dbConnection.schemaVersion); From bf2bcbd4d851cfd12982891be3847937541d5ea0 Mon Sep 17 00:00:00 2001 From: Sebastian Hengst Date: Sun, 28 Feb 2016 14:11:30 -0800 Subject: [PATCH 55/60] Bug 1251916 - Use standard JavaScript features in toolkit/components/passwordmgr to pass eslint checks: replace conditional catch statements. r=MattN While it doesn't seem like this SpiderMonkey feature will go away soon, replacing it makes tooling easier and is suitable here because the unconditional catch js already used. MozReview-Commit-ID: 3G3LxrW24HF --HG-- extra : rebase_source : f8fb7451ed261c3482d0b3dc822086bc7dba05a0 --- .../components/passwordmgr/nsLoginManagerPrompter.js | 12 +++++++----- toolkit/components/passwordmgr/storage-mozStorage.js | 10 ++++++---- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/toolkit/components/passwordmgr/nsLoginManagerPrompter.js b/toolkit/components/passwordmgr/nsLoginManagerPrompter.js index 5813bdd02798..87f24648b3e1 100644 --- a/toolkit/components/passwordmgr/nsLoginManagerPrompter.js +++ b/toolkit/components/passwordmgr/nsLoginManagerPrompter.js @@ -108,12 +108,14 @@ LoginManagerPromptFactory.prototype = { ok = prompter.promptAuth(prompt.channel, prompt.level, prompt.authInfo); - } catch (e if (e instanceof Components.Exception) && - e.result == Cr.NS_ERROR_NOT_AVAILABLE) { - self.log("_doAsyncPrompt:run bypassed, UI is not available in this context"); } catch (e) { - Components.utils.reportError("LoginManagerPrompter: " + - "_doAsyncPrompt:run: " + e + "\n"); + if (e instanceof Components.Exception && + e.result == Cr.NS_ERROR_NOT_AVAILABLE) { + self.log("_doAsyncPrompt:run bypassed, UI is not available in this context"); + } else { + Components.utils.reportError("LoginManagerPrompter: " + + "_doAsyncPrompt:run: " + e + "\n"); + } } delete self._asyncPrompts[hashKey]; diff --git a/toolkit/components/passwordmgr/storage-mozStorage.js b/toolkit/components/passwordmgr/storage-mozStorage.js index 9aaf71666008..9ed7cf5fb5df 100644 --- a/toolkit/components/passwordmgr/storage-mozStorage.js +++ b/toolkit/components/passwordmgr/storage-mozStorage.js @@ -1017,10 +1017,12 @@ LoginManagerStorage_mozStorage.prototype = { } else if (version != DB_VERSION) { this._dbMigrate(version); } - } catch (e if e.result == Cr.NS_ERROR_FILE_CORRUPTED) { - // Database is corrupted, so we backup the database, then throw - // causing initialization to fail and a new db to be created next use - this._dbCleanup(true); + } catch (e) { + if (e.result == Cr.NS_ERROR_FILE_CORRUPTED) { + // Database is corrupted, so we backup the database, then throw + // causing initialization to fail and a new db to be created next use + this._dbCleanup(true); + } throw e; } From 4f4fb2a030930d1239936903c6be07c1a683b581 Mon Sep 17 00:00:00 2001 From: Sebastian Hengst Date: Sun, 28 Feb 2016 14:11:46 -0800 Subject: [PATCH 56/60] Bug 1251916 - Use standard JavaScript features in toolkit/components/passwordmgr to pass eslint checks: ignore statements which eslint regards as native reassignments. r=MattN It treats Assert, is and ok as natives. eslint rule: http://eslint.org/docs/rules/no-native-reassign MozReview-Commit-ID: JzwQ37Y97jJ --HG-- extra : rebase_source : aac538173662c5cbd2fb62c557a8f145fdd6b77a --- toolkit/components/passwordmgr/test/LoginTestUtils.jsm | 2 +- toolkit/components/passwordmgr/test/pwmgr_common.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/toolkit/components/passwordmgr/test/LoginTestUtils.jsm b/toolkit/components/passwordmgr/test/LoginTestUtils.jsm index d7f4cb5f6a0a..5e7ebfa16070 100644 --- a/toolkit/components/passwordmgr/test/LoginTestUtils.jsm +++ b/toolkit/components/passwordmgr/test/LoginTestUtils.jsm @@ -29,7 +29,7 @@ var Assert = null; this.LoginTestUtils = { set Assert(assert) { - Assert = assert; + Assert = assert; // eslint-disable-line no-native-reassign }, /** diff --git a/toolkit/components/passwordmgr/test/pwmgr_common.js b/toolkit/components/passwordmgr/test/pwmgr_common.js index 023fb8d0d4ad..569bafda97ab 100644 --- a/toolkit/components/passwordmgr/test/pwmgr_common.js +++ b/toolkit/components/passwordmgr/test/pwmgr_common.js @@ -289,7 +289,7 @@ if (this.addMessageListener) { var SpecialPowers = { Cc, Ci, Cr, Cu, }; var ok, is; // Ignore ok/is in commonInit since they aren't defined in a chrome script. - ok = is = () => {}; + ok = is = () => {}; // eslint-disable-line no-native-reassign Cu.import("resource://gre/modules/Task.jsm"); From d34912b8e7f2e8387abdd177f70086389db3b87a Mon Sep 17 00:00:00 2001 From: Sebastian Hengst Date: Sun, 28 Feb 2016 14:12:00 -0800 Subject: [PATCH 57/60] Bug 1251916 - Use standard JavaScript features in toolkit/components/passwordmgr to pass eslint checks: enable eslint. r=MattN MozReview-Commit-ID: F8nvRExCbff --HG-- extra : rebase_source : 07d5a9136de52a2af8f8591884f564f7c3284299 extra : amend_source : 5762ef9d2ddc1d1023a68a411a2f5584d0ee15e1 --- .eslintignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.eslintignore b/.eslintignore index eb809110fa9c..fcbb279aa666 100644 --- a/.eslintignore +++ b/.eslintignore @@ -180,7 +180,6 @@ toolkit/modules/tests/xpcshell/test_task.js # Not yet updated toolkit/components/osfile/** -toolkit/components/passwordmgr/** # Uses preprocessing toolkit/content/widgets/videocontrols.xml From ca41ad5fe16235a15ca25cf774b090849f0d534f Mon Sep 17 00:00:00 2001 From: Andy McKay Date: Thu, 25 Feb 2016 15:39:16 -0800 Subject: [PATCH 58/60] Bug 1250667 - Sign the devtools addons and bug687194.xpi. r=ahal MozReview-Commit-ID: DBUgeyKRLYJ --HG-- extra : transplant_source : N%EF%3F%A6%83%91%B5%C8%F9Ep%8A%F3g%1C%5C%FA%98%89G --- .../client/debugger/test/mochitest/addon1.xpi | Bin 71453 -> 5577 bytes .../client/debugger/test/mochitest/addon2.xpi | Bin 71455 -> 5578 bytes .../client/debugger/test/mochitest/addon3.xpi | Bin 7423 -> 11643 bytes .../client/debugger/test/mochitest/addon4.xpi | Bin 3049 -> 7340 bytes .../client/debugger/test/mochitest/addon5.xpi | Bin 2933 -> 7224 bytes testing/profiles/prefs_general.js | 1 - .../test/mochitest/file_bug687194.xpi | Bin 1602 -> 5659 bytes 7 files changed, 1 deletion(-) diff --git a/devtools/client/debugger/test/mochitest/addon1.xpi b/devtools/client/debugger/test/mochitest/addon1.xpi index b77ec953125d620c5746638272be32d1bc341a90..689689ebe8a87bb743257fbe4d93512ba93f98df 100644 GIT binary patch literal 5577 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 D=DzUi literal 71453 zcma%i1CS@pv+dZnZF|SIZQH-GZS2@HJJ_*}9ox2T+j{%mf86^J@1i2QqM|xab$3K{ zM&`*=iZY;JXh1+fP(aC%a3YM&lUqa}KtNbvKtQm6XRYj=U5spP8JtYb&61Q9)|rro zw_nj(Zn!C}v>~dbvEbt44TViI8!25J8LG65C7wbXvz|7ODeNqVWl*+1zq;D}FJ1@B zX?9a8Rm5{43z!fB8rfRsqVMx|g@1u#o_+))-T0Q_@n#H32QgAm{$XzhA#|2|5>5<+ zzex-jRY#DWr6-sGsHH;1$*I$Lf&qbCrI1~okamQ{hd4sHgA+-r)Icuo^EI9b;)dyR zHPhInJ6WPL^5yAvEB%)49#@zT5QV2OQT-}{jyD?Boz5>kI}aaXAnCR_I2R*^N|@@_ z+YZXrYri)fZ??m2-bcWfE19Q~&nH9XU<}c*8A_SC;yhtzEk`hYH%sKq5mmJd85TO@ z$u>wzQeV8FhnSG<-_okE(3zFB8rDqB7p{VF+KBA|G~H6;QqttpXC7d-X#Bm zIFoP_>FD{w{5ui~2sIEwWSLbzeGmEX=4SdA(ii}6advSsa`=nQ*0ytA7f<}EHegn= z12>foN~CQWRXT24aq+1bXm&~T*`gQ24D3-10XMG25=7fy^zSb5)@MR0TX8MlOiw@k z+n%p7M&0)q4CI<@MGFjgF}>uzcXRK$q{k|yj`rF|w+?t5>n55wHSDsbnN>2-0IHoR zSo4=3NwR^0k>=E5q~|FZ*1d$+3xu9ZWP6R-n4WEvU8sP2)l}`+0X@2$VaPg8{Rq** z^0gQC62Kt$Y`$vDh|}i6YlodF#gbdr627Ae{A)hyWo1#M|W4})Ri+D|@+-*VY#sFUG2K69vgB}wlzYG#q3 z3NR_A^%OS-Qx?{0M(_2Wo(f>jd3Ad|d4wuV2PA`dekZs8Xqi zhcS|4F(cz0qe&#+q*hL9Q53T++H__y&PT9yy-G6B908LVB)ZyFWGjJ-&aH|~WV$AF zA(H9!aJuxa2-cS3DM@YMn@yT!mGorI^D(mZfTt&@O5|KIZ8B{cKJ*3`Fl3Wj`+4z2 ztn|Pzlteu;YS07HSq@Jjf%Vy(TK}d6yV)5-K9q_=S$i^i{Yc1LVGo2;(sq;TDKlS4 z-@MfamN#lNVd|`=asXv3jt!`*3zpuXU(MCEI0weGVd`)ZKR!x0fR*ar5t*E}Qx`t~OUx&#ZH5yl z&%yyYJ`}X%A6QH%Fw059rt+LmrRJ*O9BfO6fb@&#ig*L5D{|1*ZWePK5V4aA?)=?2 zX~-O{%Q$VsO1A90rPIu7^g#^8d)0n4TWbIlP_(+NUDvET< z7pS>lJ-B;B(Vay8yUqUm11EujNeW2vU_JFxe{uGhPIXc#Al8ezO>cXCRur2TvAIUG^ z+cnt;N7dKQfpRpFqE`^D6*v(D0^x*5g${BTVpIIVb7~J4Z-en-JHmmLug}o;DM);; zz0i^zULfKT1v(6isTrWpS&z5W7=T8H8dJ}dQ_u;iJ{E`akgO!4N?e~sB$u#?mHwjc zVSmjq`Dk@SW_BXwmpI9O4x!X0_qm2nDHWu^2q=7{Td?_(lG?+~$yq;5bMc;oudbVVf7t zrX`aZiES;>opV#v_uv&d$9Myx6f7n1sPm09o zqyh#MwAg|(7Q?03)b!CPS~kMEhuDx85R6ufi)LU5)lSZHCp3a@#}40bnD4MH$N8yu zh@)8$4w)qie=H;6M|LV^5aZm4uCkA8;t_b>rVilGaL1+-)@s^ULekrX`B1e?0+(isF8V8!{!Tqq5K{IevI8T#C-z z5h%rb1W<<~R8Z02u*C0HGDSnFP*P77$e~RoFBA@2(VcajomRL{f9yI4rX)m7CV){<&r((mGj=1;USMqTUoMR2T)Os@vNjjmr zDN#=}SJJ2vR3TWs8t9j|eL!>qy8ZJKsdPbFwJf*QSeOgi@Lk$sl2^!zaC6hH>P!2w z-je-w+FY)>si|Q@vwbz8DHMC$fJ#U06S(&zuN_zEISsNcXj`G7EVK}lKXUAb@1w#7 z&-pTOLXVFph?=_$QXNRRpdh@ig^2h^5#vWG6rCPw!EEUZDFlMgSbL$?IoZN2;NFW&cPSY=#ohxF$8x+10-S|`o+^H&WKP*DBa8h|+ zsGfY+qsy86M8Pq$B^M|q%ZCWZ3Lh&sgF}XI9dfg-fRQ|U%|+{Z2vqG?pl6iSQt4#x z0oMr(>CJlR#8|F{n+9Ozx5$9Spa}SR=>l3t^%|g73S`bxk&>>@C00*|w4vg@G|+YX z2)n~LCc_t0_(A^&&@uV9C>A(hQl8XU^=mO%9rl{wxfF}Hv#z3(Y%{EVfipLfMF}s7 zutjU}QcSS)AMV)zMLKlRBL^Ze8sR&D?$eO4IBS{AiQgie$B!gUQwv z;;}agVD6*?;VfwsLr+k5BNI4elqh8AX_xiA?g5CmWrA&|1LBdP9kT=cP=d)KDFq~9 zp>njn#&k+mUB$|?HC-deT_g|Iy~bp+Np8fxho_c9Ux?m ziaviZn0n6B4To#&Wnuah|9&>S61}R7(@nfiVBT3sy-lu-B=S5%UxqfY+aPz1J!=+e zk-W>VDsse<;gpFOs3jVZ#YT^^vads`FArnE#ZNxeBZ_1+8+p>@VKMIh>MYaDWyxk> zjmwr{b2CMS4!@MaZr-$VkGe!<>GNqS;CFE0hgG{hpR09O#4;*K@VHu|XGry$-V3%- zv{?U*uzVY}dE>fV6pGsECO;>7Bl>5GUIw`iY$^KV+R;nV70xG;4Tm6Y^cSi zG~1Jh%gb2bzl6c8fjPLhdS{9=)vRSIe?wC zwgfg}>Vbf;Tw)%zF{@D)qc&y->kA66%a`D>sDW1q2te?O4QV&Cu~=IIf3chw?*B(7 zbD_-lCt2!qp;eno=X1IK>|iO{a<<0~T&u36`o zUJp%FM+f}lJO>;Bz?}L{12eEWli6F;eI0os>%AcmHf!Rv?3Hq)_}9U&N3OW5u9B~1 zDu;PSxkI0iwLZt3OQPwo%`4%{Puf%>^5E zyWjTxTKwFK?_9q5X2(hU^t{zit5?H7v(ucq5`eimI)Mfd{Wfa3kul6K#DaJnYStEtQu$1q4SWqtcVOaLjZ=?MYkc zy!JXI6e~fIX(YVlR|MjCBgN_)`D)e9Qy}kt;tqRNSLH9=<#Gh^i~AN5W|*K7JWu-X z)qL4gQXbY|&|pi`A1-7o__u&kmx~QQcC(^$v_0)n-QWVSzk$Ff=D6tzr3Nu%KA+TgtgTK8bIw3vn%t`%oHpzU`UgYrFLbOXL!*jMYT$iK0B32~R5`Va7%=2;^g;L7fQms^MpFTYG z)^@LdZT|U@J`JLq1=D5Q(lcMR*jbeA>*DH?!?lz#p}EvS$#lyA(i zTSajAk4^MPX5YTDS@U;dO?eO(af3%UD|a=<+p!$^mH?eJ3#xJMCRTK4|= z^G+Dgf;+6Srozwdl4mkEx7@@&Et_;iSGeMjK7J=vj|U8~rpbVut_h=NQZfdy`qRqt zx;VAw9LQU+Zt%5Nk08RJR zUmx$I@45a0-|M4dBT^#T-=$AVv#2#dU3*u#D|Q#tR$U1(aY#?My-EV@&2c`Ka2W5I zgsPROavJG*a~(lD(YIp)D5d2j3X}IzFXcKO*dQ?zEhz{2Ml9KLcTgdjSJ45~*=DVV|Kl~SjqE~c*^@<1SJPRkNA86t z!L3jq9afOUe^5UlQVfp(`r@nW#FvRI;K zdFfVvoyUge@d7=FUC+w*YxqhGUM78|?>F#Zu34npN;^a9d@vIBCJmhAEr5J{5(2Y= zg5NnFC?Sr5vF>1Oz`S6IYmm4&usz5RSK?e(*nu|ricI?P;mB{7$s@VI+sqT{@YF;0 zm;q|$wY(Eq;Nu1W>Hld&vxVfm-NE(I%dd*u@L3~+V&hn)J)?f#)l|F@lysVTso-r3aVzd&IBCkRs`7o-0IhV`GoY^{v{ z3l!def%>msljOfa{@bVi$CLj>rg=3GBfLQY0l{Mc0nz@C@J_Dw_GV6hxwaxrJ7?S$ z?!dSO(8VJ}GXIn37a89<`x*Rhf*&eJ|S^1TtiN;HLo8LC%kBUyPnk#bg$% zb3}}5`?{4hi(Ea!yAbDS35T8S^W`smYphI&i(E2IWIgFX3xdhNcwKw#gIEC$@qH zF6gmIul4Fy9|>F|DO`!r`fBBdwb3AsF?!-Wx{8bn6z(r8>#bvow<)+7L_dbt5+GF({iHr1kk!mHc!v|)ByhwF) zEUlE@A9Sx^f_!%XV!dP;1-0VK)zPmrqv+CS%40x|fq`yLwm1<5!02&fgIq}B=lEwn`w|{#jm4ckXrl3RZ9eZOQ9EAL}~1LWOWj> z@U=d90Z9wcMUPPX$jn??3D(iqM&BwljYP&6187?XGJ9RVOdz!K1x;>UGUWwQkiy$QopYDam9qy~%W0eV+M`zFTlGnq--^WvEoyNJfh@>ow0#2YGK z0Vd*T!!|%ukiPG07Vq?v_P>F zM`6l%dv)?PwcN107ER@ddZ`}gIlZ<1D|Wx%K)u4mc}$usLX(q;pyIc)gAfUcth4QG$;HDcF768jF~d36L0rnv!Jtkq)SWM>LKB zmJMzmbZMD&l~!#j*J_@TLaI=T-9!^bJloPrQQ3Ik`x%eWg&o>_|9g=Q-d?>&M)0;U8f}BaN$*wEg45zzOq2c zlY_gT9K~(B4z*;e1Nx{+y4Vwy@={qto%K*drTz<9((^C&Bf$|Zho6IwS=8cgL-dGG z6X=={KFF zgQ7dCt3(vh)I;f1Vs(626nt z5u2{^4tIxdpWz_Z&D0#-pOZp=fhPM2m;M|{>j%EXR^#_BU-#r||Q?=UvUErA<$QBRt! zkc4J8-oez`CeO6jeF4Uke?9F_t29-7Rtv;(*#o(Cjo)?l=P8s>#&ro+2*xLz1f=JA z-ZR53Dl!G)ngHZjY$2n9*Yw)dBFEs7rEneK`ULmAd;1?(k0@atFt6lJ9J;_ZviNH; zuM-4f(%1MBhsAMuxdM8HybyKo8x-!o+ZXyi_8te5{lph%D)ndFxBcHg4Z7~>O_~_U zw=;+q`OR>D5d*Qklry`r5HuknhvK&Mudr0L4&PA0_KPl9K5Jg_Rm;k%Xvg3W zQA{5jJZo%*CvrZMZd()_us2Eg*OW`kMo+NMVJlaeZM))NLk6nGp&SFokg|&s1`XH+ zEO-cWf4EuSDE-Y?;7CP9sOc&CL&tulM?*iFyhYWxw};Tg`yVlB#tGx|jF=u`{pI=JVN|HRBu!!FbH{n^8~ z`$c8a(0wD*6U1J}yKN@O51juZ9->?m`g$bO(~bHAYcCzD)%15D?(vXJ@F@)Ijc7MG zr{@6#%WNIjy7IPp3E=zo^0N>A;dl1 z8GA@2t^6tIVPgwx>iqe}ctFqryiMfMSOwY;>CZ5MS%wxo?pH-Ny+i#=CU(sTx*evg ztgCv*78LH!>67!sAs5_4AO}H+%hs6dwNej}uL!~%czTR#$Zh*+AS=B2Wkw-mOb;*H zmV0!Y{rqN1-FhaIO`|(uU>nE{1x22zodVOv8&iBRvKepwfz2KzmA`zI{mSnRn5P_P$kBVq9MuEACNZ_4S;;e| z*9N(Y2!96tpp8vI0N&bpzp`}7CTa%5$3*8DPkj4In-@Weo8s-haScWTJVHn-`vZ9Ba4X>I1U*dA5QT^W z_EXa;CP|K3DCO(IBvWcoB=$D5Om28%vPCtAKv_iivRI-apS;LR(qsg*D@7q|tv^gV zUqGuqfGrB)kTNu;BSLnj?@>TkQ;L$~vc7A`F1 zepq4F9>}l0eojux+iYEGv$@n}VY#cZT=r(im^*fH_q|1DEz0etlUK3E7aE4x~2A)0xUAe2kaV|5Ie&TFR>?zmMTg7q?U#JNcTG92vlK(5b1|IM6!+Oh00E` zeeaj^T(T2jweXw3j>eH7PLu+t6&L)GE5(FM#m@k=`DNMyzR)ikM?oE4v=gfQ+#n~Z zO*TBN2R4SLc|=SV=VAJ$6xDU#Cm|E!;ecJQtqITKMjsJxE2d7ANV_@l00LLEGwB#t zGZ%QO35aq|?%@jpjv;v`nb?3F4JkzvQr{KeB^SI1`nUT#cRqh)x<5$!AoXliZz#=H=zxp1f7e9at~d?G$Ox}8>Q;$+Db2`sK(MH z%F|$D_MPxQ&t=K}o0QE2VDAk0KeQMB@>qG0$JS1NJ=Oy>5D@eKa0LfjBP)A)7c&o+ zzkVx5-43uPj`THElioImUue47?gy%7EiH+Tk4aU?r&fYW_k{IS|J3%5(kJ$Mo!zu7 zNW_H>-CJ#u(5&tlXsp_`t_n71nRYGulV zLrc#w`f!8YI&dWH@ibwW_82du);>aV@hZwWNi_UjWC$rth@h_6E}R@mwf$~+OIwLi z?Fzhtzi9|=^6IYhkgTD?-0CvT?kzC=U!Mp56WcQS9P%LvxiMsngxk~TN9Yc zKrZ>ib{S|G+G-!beRDK9wXRZ^@i+XPpgeG&59|0=DVc{BPW7@7!5_3Yzu$G?&Y1!X z-JfTz?>?LvGhJvX<5bOyu_Jv9CMoR9WO z*=&=I9-p-I3pvfiAO9wPzs_g8@cb+tX?Qb=a1gfMEq11P_cp86Cs0-Q5qg`RMDh#F3YJ>(v)_J4KpJ*1G7OHl8USe0 zr$7jTbI+(~;{oVrYEf64^N};u$gSJKbCiN@|Hwnz=~~q$gU~pjkm0oJMIZ!4wh{Z3 zp8`YTc3pC=hv=fdjzYHGf1nE6(NultPaMA}(gc_Nusga3e-S%=V958H4(ZW^GFWSJ zs$hrec8`Cm8(Ki8W~6!`r`TW=ln(sXBExANUr0`E+sirQI zmTp2GgyFE!ZjSb4#)zk3gENol)NWrLK+MGFPbP~|3~Nj!?OLumze;Z{>KY?4CIa#?FS(yE!Fw@eB zTW?13d#>5J717Wyy%QpIucL|r1BW>v>$Q4QL<5(VNuE^408i8&mU`-TH}^=P!?b!f zY9O%)bN)0RvAtex;N`d*nZ9bNxa50xNDlj~6xV}&l4cM3 zEPaUV&BT88kH7(=GLH+=`mGRFmdgKC!arKQfARU}+O*U7`68xL3?Mq1L;IxnxE=Mm zz%pgcu1hlg{^Mc-{yfDjhE09^(^9N|YK|aK5C?6348ioHTwMJ=r>yf3mrt3UldglzoEHkQ*E16QjkrNxj_gQ4d~E;Y&v;rM~FXX`fVK$l95g*%&75nt4Lm} zRM|tLm&0h}V0q5A+KZu@P$b7Zyb`9UwGi22v(1jb!^XRVn_A?bl=;3%>)!9PDig81 zsaKCNi9EE(oeMqTUywpDL?nroL9;(6+L42C-DtEu9@BsKn=e^YYa-HJHcTK3Mcy3kYk;bE1gUn(;NkZKPyS46+H9`e0nGZ^hVV zurudK^$nG{B9m5xV)O9CSi7B(zoM<^#p_*|jz{SjK?f$0~M`!Xig*1WzYUf3^1LOIq*b~bzG0nd^` zhkU$MLU2>st1{HVjera~5S}803AwcutFMvy8R!p|baX1~RIEIhVj0srnAsEa=_uke zS|)q>fc#QN1M*A-X=S8fr8$eAys{`|<7uLC^$_&dvx*2wG1>&NY;JD(;3tAS3{1qF zX%ldQuU#RkaeWTJuYxuS(`fIo9@I2TWJO29C()`7BIJ)2ugFOZg|Ex1(322i4%w}0 z3ygGBJv z<9kGo3mb!dD@N#w;BqiVzhR0u{7f(wUdQ=BK^zU>pN}9SA^#6Kno^7;N$Is?{TNGv)8gs8G-glqz8Lll?SRDqTj0H8n&a#!>4QE zNhuI`xEv`|ySI||VKA6rF^35v2)evZw7J}r;Zkr8N(^Wyj5aYu!pxV7OjKhvv)J-c zn8WI@R?+T-TD*-e+~9r)KyLU2hf#!7>;rPaUCz_McJw1ZCFDY06U*{MIH-5J=e(-kA?-EP zNjSP0wOZZns?0F$l~&UEnj<264rS`%p4f)^9+~J@hplDCA2RMAgx11MrjA}C0>7p? zMy;k&S$h`;u)MZ}bVd+8HyT_V+`zS7J_dVend04$pnb>ZA{a6jNMejnpm;%v2|FFw zksQtmh2(y9ovf|P(3XL4T)oohP!|j&7VSE5w1X#p7-!zmT;ISJB%gQH$+aFyf7(EJ z0_R8vp-d1XQfg2s7e@)Rw8aeIOul{Fc8ydJ9EaBe_cn^V*h#mjo*Ai*B~8+58-qI6 z_=10=9OK65QJeOzUeTOZkkebFl*@ZZ#?ANYQ0G_2iMolFHd-WiZ*egP`U>~gbzh5B z?TjT(4ZQ>Ec}Pouy?W1R08rSUX^c#rX|O;?{?&xB`Se+eZa+i?%)Gc--b%C~X zO(0F>sxwvnpYTM|zVe*BdNb%s+zBb^_C(bQR$JL5cLw-uB&g$VCaZp4la{W4C4OOm z+z7DOcigsyS1b?W9ucp&q|v^lXf_1T87E9K*Pyre@X=n*z4M$e2ra>l>40S@f&y(1-sX0N4cw0;2z)L`e2V zc4p2FMkfD+NUo|%aq~=Ye%Ccj-bPvS^uoNGAz;G7+^4ZwK+v~Kbgs*SS*msIn>#Pp zoKnjOo3r6nj+fI<$J5kHH%-i71{*uw(c3H@y&^@D;?z?%2QNoLsQ6xo;Rr>(9sgLcs-xQj@g`ucw&hopHL?XVrb=8w~3mAg8*@ov$!#eWiyXcjXJ7&a(47XEL&=OUntyPwrj=!@$x~SyJIXNj){RgwhpbS|fvuPE14TJ?jhbGm5+;}l z3#m4Q6g#ESu?Wf|C3c1#MmJdbM3MZ=mtA7{NmOZ~+cfeV!NR8nnJ5w)Vgd~S>o&$=D(*L|H>JD zqmg(Y!vg`a)BN`=@4uxS4o(0&E9ZayhsnQ(QvNBFR~rO!vmPm##oDoa3d1Kk;_*0A zRP(0J7Z=Q??;uO`aT90)QAQP%c6YW%FOyPhW&237a~yj>@@ig;H?(ucDy+unD*UXS z$UN1Uu)Pgt7`zN?fgL}-aPeW`|1?#vZ>qGx%+Fz};OPx{&FZ#Z6n+_RRo5YH{BB12 zk?*)nN%yfRJ-&o!`3F5j^L_}bWuacld8=nbyP3dkK;LcmY=78btNZn37PRMQL;ls; znDios6EjHR7)>W`Jr4&#LyPq+J5g$4%nYt>tQ<_d*ivO}dyJy%E(T8hsmmAyu=UPy zH|F`U&hp?6kG>x6c-kKR4~Wzc^Rcfz%&*fu`l?7)hWPF>e zuv*K)!IE&jHAQAX>f>f5Tr^wB*u~rK59xVV`SUFF&i(ApI?NgNE5S5S?-21y>6~y$ zjkVeK{dV2Gv&gIgBv?eULE)ea#vtFTox>!-9dD1DukVO8UEdzJH7(oO-#)+~PexB4 z2Li+Rhaf@T)%K7g*Z5!WD#-_-5{}*=Z(`RYvfEq)hSIECBQ}^{r5c!CYQ5DulIGe0xnyRdpFQN;aGDNlY<<3Zw9 zEzLzZ7BvDH#E^73KSx9Eqk{=xyW}B(LX=+YTpSGWQ7`x1fw$m^g_7qA^-P(OUS6$+ z@SSUatVLK*?zr`Yl~7(JcUo1=(8rUs;lll@^|$U~wxtG$j+_7JI34&2EJSPGGmE1o zQ)j6EfXu3=25oXyZRG|9iP>a}g9U=>L0Dw!uOXP|MlQHtY(tj>0kzfl2L`Vj`DO-` z6s?*8>sGf7(yM6n& zWIV^7;fMAM_Q}B4oB|)HI~e$ufKq7vrpuENxP9Y`ag&;^*0)YlJ8DjIuy5cHtaYS5Mz ze6yaIXRbFe{FP{c2GF6=osIp-khFJEU$ykp?_=x^_>%*<6OJZpoTfoFAb--vls;Lc zV;PQn+Nl-VncB-9IQwYr0O!mdaVggb6l-|5Q*^T-#%iRvI%Bg-h`D=peHqCv&Z{Kq z6#cnuM;rlD#;s23P9#4YRyW`qMf7y^Kjudo8)2Kc6l>*55H9JW?ne7yCrR=H5}~{Z zaij!7?mhM~SQ$6y*BwA903_JP@cT;P>vZPov}CdwI{YA~>p%8DDot_LF7(4dR$2tM z5bVHSLXANC(V-6&zY$imxcgl;0u*tfAmBpL@8SogvF7&iV7NrHvXkPHrPgY(p9V26 z7U_o<`?5s~L8K|ENOZ-5=BYU4MNneD_*~P#kGfvaR5F<`2%3$@{e0i=<92ATHz(QV z;%Iu6*7sHsYxsF_nOlBc4fIkuz*1%Yd1tzMKak+c!EA4w#Rd$BeWk@rS~^G%FivQPKN;= zXI(IY4ThO3lyQWR0ym_b7DdLq_5>9&A}Y?`4^B5Zlq5?Lb{Z(>0EEJ;WOdLGXwW@dHI~MZu!sGr+lwNaCIY_;fX7F_`nh#Ica@Bq+TdH^@Gu(>udU_@#3XAr*Zi^seCTxY6ik{CpbHf$wkEZ zOj5wS3QE&1BCI#(;n(+2SGUAqEW5E0)_mX3DLIfIa1F9YD0FMvZ5t#2Q4rKB@2N7l zvqQsWYGb+FdNeNOlVucX+S!;Pk$8QR$ux){O7MxY-A#KcB;_YfBiD@I|kt7geF zM>_>NyN7zWxaFL_*+?zmEvfj+cyH`!#6-*VM03zbAI8Ovb1Cp@(5wr+6j z;2ORLLc1Xv*40PQ9|*}E(O5eSemB&J^vhR zMCb=>9WbQta==%e_>@ix25r^spQWks zg@YWMGp3F~zuF)pE$BBC7weC8Vv_3G zjj)>$@dXH`!6qFAjbYMB-u8OYV@Tpm+9#jjN*FSF8`F@O3v%}GmwwSwnk!8(R?t5QcnLGYoMZPRx*E4u5s&q%fU> z`J`CVoD>=A0fM$qO-^#JswRZ3pF2iIa37YDp#C^1yPntd`IW%giuX~#JEFymxnvB2 zh69R0$3MUVy%bO4G+;%eWTaR#FnM06xsLBpEHjf^A?)jUX)L!SF^zSi#hb>jy){z# z)q8dp2=?IjE!ty2k~0rRo&_eM1vx#+=R5c_NRKC(+XbXO6p6X@gOz{$IeurP&~X8; z@-+OdVdJ5gY`kBPyUSWeP_l1EVIMC*D5O9|=7}_MJt0*s6YNQmX39W>_aKG}WKc4Q zrwzv&kBWsj2e+$};;N>I1F1zbjUoBEq6}rLZ-ShFIbd?1HpMnhfivtj zICpJS@lzbzx@M{$^=qbmrqh8tLBBTi2et%Ff=SKD)DLE0p9gNM5&8U=4>7m^kt>@WwC6LEv zlxIt+z45R1pBrvuo6sfLJ7zMk=R7S=2|`S!4W63Q%nDxaZ1=*Vbbz&y2gxgbS0lmu z1QBM`)76C8zQI?>bOp|JNXFfil7NJtJ_P8;CQ>Vz3m`LoifX*`QsoxCv4DXQC^@=V z$6WGL;dFR0+|eD>&J=X+^8|;u_ZX3>fo#~6rneUoY9KH?%<(-Lz%S7*SFH_IUjM+z zN&C92edgK&cfO(hDToVvzEWvaBc}i`lZ$_uEBUNgD1)SV?jDpRcB!q(=Z{!a9VN$D zvu46jcXajoQHL@WOH#%*tM*M^tQPX40`?|r_vhB4lH;`wi-h^8?80Vf=n)T2aK;R> zhF`3q*Tk{MwLdvu-?{~#U&xK6;Zs+9*Yh@vXs0p|LUea*U)5fPQQMan=Y;$21%dn{ z4tNu-2ZQJ`IcPwQ_=Sy|*uFxble0TdqeTr&)yFw}6fzVRjPY|c9^nAN4-oF$yWiO1 z4HZiDQ%sNGs;0ACj0?0s5{GHF!(p?R=|bg1@%|TM?-V6iw+CbPK^DjZXiYI_(Pp1sQjE{?cjbbN#a zJNkbalpng}-<0X(|A9d!1cd>iM^4tsgs+j z6YW0_%YSh)L+Xn5>ud-=Ypb@mf@WrQt#^xomB1=crDEB?zu`p@P?}sC+NFxcl-xE4 zKQB9pMOR~UPzRu@;4O)M0s?%WH*eE(|2zt5z2svj5oVv_>^8HZ{$*dE{2H7LnBPHz zfRi;9ME{CweaoVe22`J_O4fvz+YvG=qlq=h_%m^^3^EOk5P#~mdD-6KpHi3K6r`hN zeo*C@J|NWriYYO{5JCgFpJYdX4D~PxDfvwavTLxb!z(vW^&;1lQ5u|)*vb-+)UR8EW3M@ z8a% z>;MHMF_?L0wWl1PAco3}M50E~c!c0y+x>5gbr^Ib%2RZxi2J4(N{&beoU3|Qw;j>E z6bhK3e$Q!OOiTFQr8SPMrWV1XTswk|d4IvG0~ZAJ@FFDx{lXgQ?}WV+8JtCI%XPwp zzE=o{M%KK0&mH^~;y8ZeY~8Y@ zqt6`X_`}RhX)1u5YWaHm-r=H+BFLzy(LB|P3BAkx;gN-qCSiW=_+4OZgx#0?+YsG| z<<+9T5Oc5Q@zVGogc2;74&iCGMTe8)6?FA`LcgtedM^UmlQ)-XYvKP|px2x6l0DCZ z=GpJE9zR|y7c^EeKJEMoxS^Bt$JTA^rm%-MTH5sa(=h3h=W~EujiSiY88SSuI=>qXr3tF|zMP`Vg&=39AJpl02=c&Mn? zH?%`IoaE+XoAQ_V5Eym$U>?N*F%w_SUKkbZ+El{i&8X1=ZH$$a@Q}N@%&)fQLWOjg z6#Mq$)4#I_!;GE*Vk9FXA@@mFNpxcL_E0y7_3|BFFL*S0d?Dn7mSgBT>wQlXNo3vPpNln}@YWIm{Pt zAz7DYzYv1cruoGhHYZJopf3sC^FOkR^0B4wP{ec=`<;$y1PNmzUUS2qRQKW*mDrhOCTAWWGf-XeSi8U}4?@PyLw5goN7ZF?T z=9D7EV^2KA?7D$7448gncK`K)p%-I74&5Tooo4WPdR=d2R5^F!TY-6gmx)(Oe)-Bi zcn9Xk+;ciXubyp7T5;hj@ur&I=?$<7zq0d0c>@QG4dTFKJZ7b%p{kWt*Q}l^war%1 z+@)j*2geAeD7WoG)ps~<#>mABVM&b@t_^`%m#4nsBssAmT-bOvf~JPSn0rMBN3?fg z)^EBjy@c=Kg+Wf7p?<52$v+pM%Z@W+q5hT_Nz^dD!bgq_KP)_?+E^C&C1SNlmYV5KR^Lk@7EF{45qdzo)ifP^*M z3n}))67)#--i{u3LUctRo|a0~Ol)cJ|7=*sZh{K{RrhsRIH#4_q@qDP5vA?&H*UKG ze8@pZE-%)96#qMt1y-$-|0MM2ZM|0!?S^N!tJ0sTLG!gK6*b_?+G-Z?*n3$PZXiy(t!=P0inWa{rGOwnthXv~)tJa0=7V68< zY!u+#rx(@JjCJxbsgmZbLbZuDTX;PAl=Zh+$a_Kid6d|=o0@BHbb4A_{Wwi2NG=2? zz`?;#B!(@Rs0-b%$wK`&Qzt7DDy+2O@72dp>cgW_Q3-`D&2^;bUGcltf~5QMRjg!j zcY66yj6YW1BCEwE4s`4yl{Ovo??IXTp> zR#_^IYk1M%u)kw)dZtn#OrH@rdztiIc`~6?+>qg&ZPBydfEIO9;IsXV^O$K`TPQh1 zWRae-$4N63W0kU!yGR~Jk-|x}O%(Kg37V~n?4N6Y7;ymK`qz<4tqiyWEY4aqtkoyHeLLZBUHrBZrLB4iI6T+3Yl3`z&9+~ShB@QhDS9vNvLb{ z(V0CmqKhSK{D8WNtVvSZk|tUjNHzn0>IguLF&Kz%0-4o6bxHx#x`^Xv6_P;bfH+I` zi*bO`qn0jAml>WdG~`Jq^(MAs+>zh4hOf0A6c%YWMwc;M0s6{tx^O9Za*Xewoq|1dU+$VEhOVF-A_V$iJ z>9>;@+a+7u9jn;f!fw$M#>(JelP`;+kUrx%*mH;l*23edP6d~2zk~EvLr#I?rmcG- z*DhVpFi!spZqzrm3jfzbvPjaE;R0qQdoD=RVNm`zaHv+B*o%h~AaVuQRo#Y2O-xnm zW)Qj9(0X286vK>%bXJB$7iufZQzX|fQjhs@h1{?bxI2bYRa(-3qEx6jH^z-f%sYoa z*!31DS0($kM}KQk%>5iB0J&wB;v_PLi_%};If}H*4sA@pC}HJto$q>o`bXw2KTf%yr#E zcCP`!oGfR@d3?or)*yv8_pc_U*O4JCf^gOUgKazW`sAh{dzX2?;HSg48?l+yv z7&0?S5d%G?9c_@SiM0XS#junnj;iCACse{dcPz3U$IAJl)<|N(`h8eDDah+CLtVnM zf!qyj*9W!2kDNg8v_Sfu;SwHIi*z7Xq&zbus);0wLXhK5XRaVoLjy-)3rP`%g2e zR@=7UXM^#b(eHaRm7{lT;Da3lf}vd_6!vyMd1Sx|C5*T2P&1d#5MiH!``nI8v>Bn) zGU&bA8AN%#oflUczd-q2s@yiqNwOB805%59&D-`zEcF`ZGdSZE|E#V;VZX2ZD#pA$W-SuB7fyXf zGn!}Hrv5p#VTr_w+VN+OOf5n@UsOq7kRU=QF#y#U2S_kwG$pmfrzPkwrNz>094?F$ zo52}EvmGTn_U_k4;lzUD>7t3l@nuc)3cKk?$WTk&ITvLMfPS5<1pBrr?&BDjDzc6q zzF^4$J;ld*I)q^AXwWOu;u-5G7i4uE-=WbTKS6UF6(Bm!b+F=449_69?YN&&S5Irr zx~F$f%Q~NU&UXEJ82H6^tRh;(l&A&Uf+*c=dxFep!28qzf)b_LS5Sk41M!D;AH|fu zMbD&Hlppp`z68nax*%}=?)~IBcp#P!vlgKSQ?CqWA3B4glkd6U959M>1T;CA+oR5D zu-RM{n)Iss3CbNo%|4LU?SY(DBitc%u(CB!{a~f7BpuY93>zeXPP9K}6XT;!G{p15 z6KE93h+Vb=BRHo@4I!jKbYCshE(N((l@OIZ*Br%dmdy->)?0bP36I9)i5A;mcWl1T zQZ{IR3nS2@*mOv-+W$+n7}d>%n}4nq@Jmb~V?pWh!tjh)9%$jflpogNV+nXVZqk{j z%zYfe4~OUTYU{BIr)Op{6rSPp_bM}u%hU1fZU*GIRQPQAz*fYFN_`Qo;?)NeJK2j*x66~k_JyPA*=AT~}cO1FtyK{`& z-%QNht>0iVy-@;Pd!)xw-nRlx`*NlGx z;z)!QwI+gg2ruGx0Qw&rI>-SWb3nucRCxv`lwws6Oi3?`9bxby4- z44L4_lkFo$0gz5aN@*EqzV$xiSki03&_cp9p6K)xIjd{U7_y*a)tFWg!Qpc5IuI@b z-N=;g*YYqKkfd{h4=f4=Wv}7mA8ZrFV#3Th(iCFxgi#~jirkZJggM~gg*tG8f+gtG zKxg!!R;7oEV5LLYCS#O_${UbQ;$Q}ou__}L#cF2=4I;%G4}g40axefp8>g05FZCOS zDNSjWHHKJJ|LnA^nh6$hBpgiw-KtySlUR;+1F_i*L;Em))dGU7)zycGXo8m_+=P*; z8}%U%?Bzd&D<#M@1zhKpts+jvdWkR&eM^PxJrZP6x9=N^%W|gAzmq1T<1I?^9m2E8rD#pYs{8TDxy-F&yy3P3fgFP#CqxF|sM~8^xfm z%pfGLjDX?W5yNaGPTW*16?H~^jcj>3liR2Qt5?*9 z>XgEy@zK<6T4zx4`@$TncT zd$5FcjJqU3A`XOhy(g9~F>3y{7c(Mij|y=$#)R?~1o}l&Imo=Id~f;p)Q`Zrq+gI_ ztY6bn;E-u)h6ACPi3=L9qafNH^K@=31JHAwB3$%ly(Q{UOBd=*tFd@P**dphwOZv* zkKCIs1S{Ziep;3$UfX~^1)zlyS>vA)%ABGae=rJw>4F+rXZP4e!4CaV61}kIz;;%< zkWlL+N+0Mx4uNGeE{gIE8{wr5lT6brG9`r=Ep2IN#$?C-r_@KHJLQBrj_C~MREpHh zW1bTH1TEJU^$6{dV}>_feB*{xJ0q*qIjwx*Cdbg%7qD1&me}C^;Nee_Bbeh$#{9CJ zJ%C~)$2$%!ko9Lq;`0{11h0i*etQFC1bKKk9HOxhn+UqBWH%o){SQGy&oYM!_90&> zyeIlBT-#_4oSw2p=A}eo_lsSVU-pgkXiQPfaneUNK*#3TqbDtvGxciq&O*5npCEQ3 zObOJRG$9veBIl-CJ(wF47`nkUVD4%LV<46MV!t-F<$}Qe7D}E;5f*v!4Edb-SUH>z zkqzS*+O;nBUy)frQU{xy03;qom1uIC)`a%Y$sblvXERknQAOS<^>iB9p!HOqJU`(U z?-jZ+K1R0d;Hjzy7osp)a0uF%7eOk+Y}9bud)rtuC3Eom73?o&`!l~H4Dc)0EVW%bvYHMBs$7WeWFXKf^VV{gZvDb zttuhgsVVt1uAf0?WSVC3vsqZfR$5d0wAj@IueSDILGBCAgKjz>PI}t~UoirH^ML+| z8#(5s`O4$;lSn>k8>V-1xrV$wJDkXeti`sC6!ywjV@LuYcfBzhMM(-uz3K4&h1P1B zT9M_DzWF@+h0WM`zH|4Ng2h(*CcZ#(Q_BffbIC4N?)#0!s0-cf1+RBo0jRvA5$ick z*7rIBGxo+ir57VwTWOvSF*!qaeVy#rxJ6&3?Mypwqb$jHf(`fl1yi}1CT4Bv?48m8 zuMMM$XA_?FI#IKJcGq+Rx7a$7h^@PKaLZ8Xcz62}?E!Bsotw*@a8Lmj+qyCntuorW z>tLA9ug1plAQy6Pp)0TV6=HNd`pMnb!@70M$FNrSqIJR6Q}ydwa`G0hi94UV$9DmA z;ZDDs1kQ1D-YCkM;vknUBjuagzX^6#u_{Gw^3j^{t?0>Oe)pTcyk#o{wj( zNy2Mo#$-q_`<^lDW6T?ir(9~2pY{oQcM>w9!BvR*TAjx_w+^k9Q1S=U^;vR5v?e$m zNBaK_CH_k{ht|{mJ@FIGWBG$4{ugNAAA{ll2Msi9YX3;*P=BZ;ffpksO*+(PQestE z6E&&DdYd>A+00WHjvXWvLt69;AnMGR$8B#q05s_&IW6wYdeXhS-5s4?;Mmxq8xIP* zNu8X?-U)I~vg~YFcCV|{(!Ilszl%Dmb`U{sZH1~SbTcB1*^-q}1)4NfPIX9zv4iy< zbCt>%h|{^fC~iUDvv~|ne@mR!o4Nepk5>wpti!m;q-}?CEYE}@7_$j#WV(?U%(7O! zRRNL_?aG6dAIG5@^WoW#_&aDyJeDV=bO|P{b<4&pWOxquOnnoh&O_o08P07t?ys6x zB&ezO2X(a7&o%cKbZnZm`+;l`!9pen>3<`JR0U^nmhY;U1iKiWZoIj$Xx*;1m*b21 za|X_fwR7O%;yz+kf&ih{xVyQ4yje-5)Fvl6pB8hV_u@g$Hs;IdTD4y0MCQKLsWs~b z#G0;hdxh$Tlvg45#zxsxH998!B$I;yQkmxg7N~vOxm3S(8);^xoWV}V=9RakYqw>-9-O?KZ{ag_U-IhqYSYxw zpKHnIZ@1~}uIb3@e!KIxWBJB`0UZV<+VCmjZ&W8bBYf#J;ZJix`_?o^LB9Y~9ll^} z9u)>kXtKjq*B(GU0Db}aO$oBr>CpVq*okG<>!$s za*3=jfa|wHD>V}~JlO$QGcy7Xm6VfhG+h|sNKlC`EYtEuDI?q=Ufs5uVvwDZvJ~qx zs$h1#=8)?vsCpR4)k}8gvoGnh2?o95Aa#RyGkJR|{1idDdLa9U z3XWM?-6eyw=F;`9j?1DEt|o-imD3hN^dk6>{+cBI$H(yrnkC%<&kYRF>-NRkN7S!` zSEGYt{<|mu@35DSHFhdQ;2UVnzSlId9Kb10sn_0faOe}iy&eX(JpsxTSb$Dxq(CwX z%j<*^YuKe>0pS<{EDb^;M3$EV61Ff(+rT`i3DkgR%|J=;36O7UU2~&x%vxN>opgY0 z$_3ON((-Rbr1THg70tVL1Y!9v%)mcRQ^)6hq%~GMBFE7N)busc4G~BPDjPujz)~XP z@R3dTMhWm(fdTQmog_(5wiw4i^Nt!IrNAGnC-IO3G7CXPsI@rogWV7IFi~*ld1xF_ zG;kZ>rL}qG$3%&a!O$mFSkU_}VO=Ur3Wh7x&>C9ApAgFBUq2Qik6lx5E6QYDR_tdy z8A|U^%(O;e?_UDU^E6BOECImag5r2uL53#460?RcnNncqFy&PRbo0omAjGNR5m1M} z^D@TQP1eYiCFdz2Wnuba#&K-_~SMf>~$q8trL3Bv@`HocVWDeZ;QdAywH z6F%=lFyZg^=S45>H(GZ&Pa5e152?rZw6yvzfOVN)Tj$OGJ2NV4d$fI6kj zSmKpX2EoF(K$~y(O0e#(M#94^*n4G1HOuo&j9cPJ&y@GNmw~T{{_p~e(8lYYKJdVD zznx2$->R;zkUs8Nk^A-5S(;i|ZUebr-0@8lDQBL4qwPv(ui4+EkfUCh*U%+2y@Th} z%B~vvh24;CV9JruZ@2Tu;I{EkJsN&rD*~1@rK@-OtR5jJv4{sR+ffz}<%Gqw|4Qr- zDTOS{1>39W1&E21`CCg4S(^`d<{b{bC22rov{eod9eX!AAaUSOiSV@IZp@BQz&CTa8IGNtgx)r>qr(6x!U$ zglCnDapS-485d*&>Z&K)l(tTP+cT;`;9d}&ql^9r_(Vrjtk$HR_dY)`QagZ05?k=C zq6W6@%q-%A25`d|{!h`O%eR!y+;-@;R(W?uC1`vcr<%qA{w7hbGSfeB`M7xmk4O4Y$;4ZHleb@-RsrgjU}#JbfEy z+w06ig{8d-w~Ytk!h;sX0TcP*ljlFMDU6#k;Cnj3e4*5$#vC)ynlM##mT?{My+499m4^BeBFMAPf6eC0ZDzQ#h& z!U`EV4T>@WCG%)w49|W~AqBO2Mv<9m#`~A>FT~?@oMdu~LFquqk||irWl-_ItroTt z0-@$v9!JW~_Q1M z=D{^!-k2vUiF*-qq%)@P+S>{WJ7^tSw-Q;!lx+kk<8V4q!txgzbvM-3O~#qhN<`S^ z?v=`;&od7`)+}3F%kWBZGav=YA(Ry+leb<9^TNXJ9q&2BZ_odeJm^0;*lidY?EZ~o zuP(XsV*BxD@&EAb6#s#p`q%M)EGa+idWiD2{XD~u3`pN`9QtyBEM!CtIb2dAUoI1a zC*M+uevI_?Y-NbA6{YDr$9c_mjY~ui$B)mCpDt|=rpJ}*PjgfcQJVv6ANjF20?puE zEESmBA6&qsYv4As6`hXlHH_d&4J=(sj-Zm7QLxNEY+>%NG+{Ha1S)ooeqGMZ!MI>` zu?0&3-E_ptu-sEQC@1k2Shm6YVNnVNpz2Iknlyk+E|XcFiVxtI8?P-0(?Sc8IMYxi zkwTN$`)+G3b&x35;N6u)1%&X7$=({fV)De+$WT?*=Fs@nq`g2*tQK$vI7<-~oF9q+ng%q@vt2Vs@uFERp-is53R0Mo%Z4XPm!BdpK>9@L zIT$)zx3W$KMU2oxzWjenu*Kcv`HP-d#`)4)nYBq+u<47BM$`Ryy2&q8&kFV)ObV`4 zQ{oY0hL&$4dXU8J2Mo)2)(qmC8wq$*A}k+MX{s#w0XKObNz@;#_j$s)P}h(DifF^O zns95yg$ei)gtCr~!VGW2PfWd`9gSR+!eRB5pthtCvV^gue1JN)4V!+nu@{&@({f#DBhfTKzks^Z8cn@cj`AQ2)50{#UhU;bLp^Q+tbQ($4b|2tDuW zEL*|{I}&i70gX5s$ONhZb)GcMqKXWuT2Jw}(HWRSjD+7lo#OD+W|UU&IBa1Wa}WDj zSGD+KWI8e>LC(r6D266X!9V+Z|DJZE4@_nFE&n_sk0xetGI;vhDfJ(rKQ+fFm4`60<%Vm%Y3JA&$j9VbZiVCmoMjUA(Up&|H0n4pqZ#Dz7;0WW@hvazZMTx@R1Q8S^fL=3hhxl(No5Vq{ME5lM|X3YYI+yeBB8=%~N zTk!nzE(~eX&j#*byMk9$!&YZ;tnvc&wvdF2fiiz?rTUkWc(furu4c2)%`HRHkma&& zYw1D9z0~P_8p;{9hVpt3d8S?ZUwV)b$A3E~8uwEdz}AIR>>rFm@zK>pV}`Uj#Jy!1 z-2o5F!Vhiis^U7(bS20{t&A8cgLV?Nc)l*oXh)PYc1JDbJ!U?Y7{}?nvAw!(CC_yH zEMQ45p0v0$Lv2T;Fs(ckI#AZ|w_M@1!DdRszviTvmfBLtmfG^M#m?#8^Px+|zhP)3 zcZ75jKC^+~=tEG1zlK-ce^C}nGsY@2O9xNWK(QlIWyEVRshMTNxZT6xUtYrv3ifcX ztZr>?Z(`b9NAcF@@py`pl(v`-%ser zEQqfAxCH%Dp?7J0J6&fVmC?Fk?gJ;NJ4KnNMv!71PB(ebqzbGe^n!{CKHEng@shTM ze@LBV3qMd*eHfi=uA>ea*8V6F=;SGFUBG^qDYr1b_gNnggM~6G*Da5hLA+TSHVX0D zE2T-nhDMBXssRgoxPRxReY?9c^t?vPPpy8w6K->Eb46}bxE3r{?CLkIMmv%D6^D82 z=(aMdqB`D;DF0Wyc%E9`6b>=(sUKU#ExiaeNg`%O^R32txewdychs`7q|tdEgm02( zQJ#7Pk8lDlzV45;uIz*f0m>)Iei}M&P)|c>^6I>3Wp7ev9}z!Kp;I`9?TnA#N0*R~ zk!YZ5{kwkN*L4;D>rjaEBILzyWED%yr>iPa!qSV7mC<=j)}v<7$u(mrIlV=|s$Z*v zve_((BwmV_vRr2O_W{U5ADXxk;bTc!B(|aRJ&dy=#dq4E=m+`yW4enCol>+I)6!L& zCx4M%SZw&l`>O6aKiO~xC)62tIdda~1l9P$p9-GfT$JWcWj|6UPhXd(+mFTBSB=^Q?KBjtzOmm~YqhVzG!v*JZuEn`xWw&@x!=9>E*S7*gdo4r=&`e;<{}y>x z)WRy(D?mkLmE$UCCSVMuRf}RAcjc!d5XrSjPo0O*;x6>|bFT|T2vh^FkmN~(Ch#~IKVnWrm5yt;&p$AtYkW=CpC0> znr3P%UO+%)e4hF0^thUF{QyBR1Q6X0CGe;Zf^~`N%CYpQ_JDMZ=aURMm9(@+plY*! zN}xH{-c6nwXZGRZ(kkwe`Ek%9*g*9F7VfyUHe`&i;4OCh+)@#|y}x@c%9QT@HTQ~bVT;x z!*3Mca~;mS2GbF+8C_nBh}iu0oZmvPFF5{@R|l9~nAmw=Fw!sg_HZuaw51Ep$C=%+ z5qo!z!i&X~7Ps%0i-_+0a76rOw0qDQe-_XYFT)0rSe7GHrY&VnunMfF3FwotdN^PGAD#p2i;O9SGbQXWSt2-n_Y@zzlc#mTP83N{F~)# zT?3sbBFU(O0|rG;-o>Rn8y@>*2_{BM3xNJpGd+(j&LZT)!J&oArpnaUURVplKN=}U#^7xaE9b1uqS&xXT2|KKtS<@1L3bCC z+9yEV^L%kBe88SQsl|#w4DsU>D6N~kl-ui=vMWm)8ZOI3WT-zoS&q`UQ>Oth5i04c z1CL8NK3GRI$W0(@S}@-8ShV^p=aYHx&$`<+-~SdN(Rr!Sh48aL@BF!{@qhV?`RAI* zpFuH2{oEdh72(_0Z^%OMQrBx0H2CE&f(XZ)(y0_tO^QHCagXkHPWdvQjXhrc$Mxh( zeJu$O5$jZq`SAVAl)YILu*Z)eSgnJRG%TcsqwDW)uwUj`kJnu;J1lLu;3Gep9s7>~ z>(A2o#6Hi))WYmPfHb0GDTmH&le+Y}mLXq5S#^GX@F={eZ6CG7qOuya?K%#+N2&Gj$fcZ8un$H{Os8 zerXRx?R3&6dVF5=;ovCb>N%PFs7(y#>&tEVA0kbJK&EtLhTG<9K{9Ea)+^Q zLzxQ8x*K)w^A+?>2S=hHIeyKbMnx@?+oSR8WLMLrnnxuaQW}Uc1r!|gY3VVmUrnp6 zD(YLhcJSzSaensHHXTM{lR3L=GyHOx?N_)rspsJJbFSxky**q{N-M2=;!;cfbxlX2 zybiWVTXAbm6*bkmkrOtjK7l}FWs9ZCRe-v|pEJ!fO5#pQO7VTgiw4KVswR4C84t-7 z59NgOJ({C;Ms0^Sc}KaFD>4XHm^c+u@$$I(o7L&pFPN~rnJyhBvwI(7cgbLzjRb1Z z0NiL#$P;5KPib4fmO|f&-Ok~GKmx)IoNdCvK{5({4YF;HT#h#K82D+H4`DnOG+LQ% z!X_@{cE zT>(=MrC<@a@pSgysoEecx>-9{ba^maV@2N?#P>?yM?mHvIbNliT~8Nw9&r3?2#q?w z?b|$K)~fvRd0Msd_6J$w?7xm1?8RZ`>z_QOkoSJur}dbGV^W!ECztnuCxTQE-yVs#Edi1L1ov}af{ zkE<2Z(uBIFp%j+Ia5J!mHu?&&an6D*J{~Pc$$m$}cWQ_dr_H0;fm8g}!t{}p`NYcj zi*I&=?4`RR2bakwZ|xgv5Guz4T3X$+e*AAIy z-1ulwTCPk~1Xx&n+gttn=MyXjDC;}mG0bksy=Y+~x$$muB5f3C4Zkj^U6aeA_l>)U z_3Uq+`CF9Fz}VxAUoQAHpi-W!c$r;R8ktUCK*WNb=wmJg;L)3;)r&I+ zXym5AVcrhnrxMx?9D=@7#_%HennqqdQNcMLaAr6Cb)1{hVq$eP37CM=-{h&%yQ|qbbo4>p9-q1E&~HDmo~Fe+g+P!Un*DGqnPV~@05P$Q@Gwdu>b!r)K|Nq zumgXnzr`O4hVp+y{rz)g^FPYk6cuUtb%B5Q7nx@xY@E(B#AINqYLp0}Vh2Hpf*4*o zG#vXC+#rf^zw3)PL?ARJpBrPm?dPe1EZn|FElrJ+;R6VM*MJ-CEZDj!wh8b_ND1I- zM2M;3K)TNn{7-e&lwi-sDiypxh&p9B)=`i=r8mT%x&2ijknLMNaGdwh9tmhxvI-Q^ zVzk)(Kzb%dn^!6y4prCQAe0DA(R-utdjdAiY?W4mJH}L1((8PHiFI(ZY|TYt%JZlGa4^G z?eim%Jp|UqKOEIAwuV9{4eO}}JmQ^LdvkSl>8@tXqh5zrr)r(y&>JXRcxSbhaF}<8 zZKz)(L#Xp@&NedI0oAL&yWGV?rn6v|lKsKcQ5m~H0V;yanE$k%y3o^_k=Jop$@q+4 zqayLJTIgvCTO>#Vi9{yqNPYWiMdwpC=ky$!R&2uM&A{k8EP9Ghlj~|VtEscfQAne z!$-tMqNs9=AM%FLY(0?5W+gY(*)gt<79>PE%(LG)AA`adI}$=-Xj0Jb`RIG~#htKO zDXd<)QoT%=`lbt!rfFP8od|Zl`Yc9!AskdZ3f}g;d4h5G$2Y|T57Vt|*Y7DCyS!ae z`C)vK+X`3XM`F%$FeNbh$Su>Yfc81Km3+vH=f%dE92gjc`~7zz|5WY2Ib@0dQz8Eg ze*PN?-o`osbN4f0w*E*of9?YRA012ogD|VJ z^UP;HyZS?ZW_40-SLbW&M#MKH{^7FP$#@j6uB}-X_1j3d)5DlcOR|eKmE<<|Izn!{ z-M45e0K>sGsi!5j_z^>80B5JQ%sq!41d11kAR6nYdFknb3S#P|j zU%%wZcO|gpQ=GOce2z^;$q%pV1vo=F%djxM*>F>Yl2*M7Zt_w|cs9Ma?bx%(*65$RiS@d)soSu#{b!X|PU3NxSl~y|NLfaN%mL4rlIZr?{u|tvT~} z4M)t7U&FaGLc~tw79KOKh^ag}`RBJV;E4-qdpH8U1931mvucCCC0Jvsl5ZX}X4j_g z6NA+wkwiGiP>vOIVJ%(>Y~!Xau%ZL#p&O=$qJctIZOQ}a@6*{W8K`Iif7g82V z68qrEFs~|tTzt(A{kTjIofNmU=SPPkb3gmK@mK#!1~jiD$erU{y4T&w&LC{Adal~^ zxIJpmw(uTZ6YyCfbbeTMYDvJ`eXyXM#gK{4ERT=JW^OSv~d`}!t~LjMJ9#xJo+FjB)S4p}nQ zk9*7Be>2zxbN+VSM@`E^J5`+Ca7xlgc>u$WVoUKpN5 z4}n`io{c}qmn4YEP&MQXWBP@~0~t|6U0q#AXxnmG6O)6A8+tmP+BS-bwu=d?%kvN} za%?CvnH5$#Nrze*Rd2|u-=f@UvmCr!SW)~{uSi0$zQhK&Fs1p1Q3EF84y1WNilzYt zx-+GxQA=&PXq2Bx5_DY+?%$LlBlW&QKi0_2Fe& z%Q#O6nZu<6#!mO8{>L=^01)1oI%&C$8Q+sI`}>#)1=^>UchkUA16q>1>Rs}LJ6l|Cu}6YJgIMfCS#l%(CW z5@OBfVP<0j`Ek1}JQqyU%R=--6-a~9#CR7#6h9LZoHFyv`V?*V$R&hb@EM(~MyPee z4oF#jbutW@#f?n&oR6r;-1@yg1k4xF&ru@x|B4#f>+{FhAi#Npb|=_6aUe%*lBP9B z55WdxpoH~(diCZsvm^hk$zwpHpXSrZ<~lLi9MWjZfgnDb?I^90$gN(I+@4;5cj6{9 z^J-98?65C#tK!4K$Jxk54E&&M-L(y$jG@#6t2%`*v{S2V4>ea5Wj__I401qnYvZK;1AP_yC@Q@3x1++O>q*DjF(oCZPLj%fmI(a?GtzCYL~?fuvdV?|P&g^EN46f^ZfHL1m@z|!k2v~oaq$f4 z8zx?*pTohLMe;|y9g_>n9BwH|zX6yOMqc@>*uiKikC?jBumb!Jc`Fq30)(R5ucD*O z=h|oZ;_=oBHC`v6^z1H zGdqHoge;SOAyF|m#mXA2JtR;C9609Xw z1YJpgIxLn`mO`?X1H&Y;GqVY_g9Jc1)qsZ}J!eTlN;*y&tT#21%|^WvswaVf!ZbyB zB{S1?m-b6D>qt>3*xi;cp7s0M3!YIXy&tn?4Oo}aP%~xA@sR|eo}6!z-69lICkD%^ zQ?d>;knyBr58Duf?Rf-?h8zJ}g`9r;#dpkK zVO#oz*Dmj_8E=w#JkOxMNfizrg;4=#8Dz1{OzeXFVRT^^n5;k`R&%e4Z;nY^`I5@8YZ^nJ)NNsulNoSpegmfyPqQuuDq~(uNuL)L6<&C##@|qDRSXT+ z;7;O&*Vd6o9wPW?@;z8)JEVTdMtCPqv#bJ6y62zZIL)08C=T7W=7)D*D4Pz^aBGfK z*;lHu+Y*p^U_;>vxWu>VHjWceMWQCN+!?3w5jf?~Wt<<{w62p1>zaWJlgq_f5$0}r z_LEus2ju^KEF=Ags`wKMT;=%IW-Xs4J2Vf$wMl%E*kaScDya7 zX<3KQV5<@bK!3KsYD3riO6^jYn5&>2-^(ZH$Ci2Nko%;a-I8|rx^|US=8`6461{mB$vY)h z5TFAs>OX$9GxhWQ?qDw@(%aWsRfU8i zxHs33E_Fv^Nt0|jL!*+h=Sb5u%qm&hB~9tk`aVyg1(wBnfL8NCW>sQQx)==cE3T?F zIvOs6@K=33GbYUCTXR@?tys*S5ZR|i)H7XRLf3v8m@Jt9;u=7QksWajtN%wq<(5pz z#XLEAP?2J1Q-|W;OgNdBx$<8K%&B(zGqJQHuBQPGb)m^}n{S4dUp!c#=dea(ON6ic z!>VkIVS0lI)u6R2Rm!LV8&5Li%elxGA}sRd*fe@08{z(@1$d-DY_k6A@1`RusnnGA z*mh{SiU^)4(sV0|TcN?IGwlQei-`&>%g`ivR0b$eb3ZQIa3qTcSi~6HH|app=#rl81+FE17j?War{V1gz4iJ8O)Q0D$L&6=_1jcb*n#c5Dz~Wh%<0e ztX7y^1O#nKOApbe0C>fts~U&Ih&aaZK-z3zvWH z)UD_HKBbq-{)m&nEuuZhD$P8Gh&h1I52Xh)7xU;?fO22WbJ)n=F{-KA&e74<*6Q;0 zzWw@m%$ToeFeNV;CT5>alSPW2te6hzFn^ig51H#DQHm4w@qd#7tye!grGtSPAQ}g; z56l(sjI)4V$UFCGP@n}w1EQ+i@rIqLAu#~g{{m$yN7umvBrr@#hR2!8yXe1R@%B3v zhM>`r)_WDQkbf}=AQxO-d!nX$T|KBrQ+Aqhf`EpK;Fs_YO<9Dv2sEx*ftYYpL)|3C z#q@$8Tn9iR;Wv@6M`{Y4# zJ<>*#N_{tuICrd<-GHPR(`@E%PZDpMO5_uZ3&VU!-#gNX0l^L-ncy&+Y;i<sKnTh@D?hYeALl|^A7Mzk?gP!~Z=T0RZ6K>z>* zY91`Ro1&5WXN8^hrLVDCx!-LbnZOIT5l3H7V0|=P192Fz#JXZ_bOpPU zY)Gm;TKU#lpQq^+KeC<*#SYV>uRg#9MYfm?g}49!aEV%Flf0zV~m4E|=Mp?T;(*u%(2-ZY(=7rnNrf3Z&Z|ZVSOLbT`rU3f`j#-pd zPcIR&HB5;*iqJ*Oj0wF_C9vGkwx69vR?loiUU3Ra^D%S~kwH~qoiA2$R4BAoCJ>T- zq{JWz>1jcbCvVi;Q9p>*lJ!US!6ssfRL9KrrQ?LH<0B4mxWR+BlIFtwa_C_p#PjZm zCITWx!31}rNxjKQ;ZbY1PLd0MOIArkAKSnZC$P|}dI;Vkq_~;Tg8atIN;@vdmXB2$ z-LG>}SQ_nW9kVr^uMqJB79x}k&UQ0^3C!L;oh1yGJk~=eAk%F$WESzQ9^SA{DfmTF(RGb8ElFTBy9l+Y7K}aqEs7v zA`_Ol1)jqE%d>2>x@_YFHQqEx0Th1(+fRrU4(%C%5W8`rGZ}y0h2t*_qw8fYXJW_F zH2X+B5cf{5^y_(XgY9PxOx6AbP96Dt|IC*=O!Vh8ING~@XfAJmLrUVFI}ScxEE>6+ z`)yPT2Bz1A?=ON$_y+N(2XZZoiN1-Ov8Q&WW$=P7{^o6RG^Id~`O#HNL}cVygvE@j zT1dRcEX<}8;Ad%99Ba`_KsU7n=@h|7eLJM0yIrV|nu<}-lx5~Jj{p<$pDYKxd=CdF z55(Et4FF;_eUpzN`@Plil;0)vIbEFHZr)zsJaMbMDOlA_xH(W6enGdEcd zR;Ziw>y$ZH*73NZjpvkLB^kWh^=T$o`4^xIHBF-fWCQDQds@CoPmNpT_Ia4HuUX{~ zYeHhdd8khZtu3feDdF8Yxinxv0>8R)0+GRiTg1?8nCdB5i7Rj?UttB`K2$XiaG1Zo zi`D}4pn~CZQM50803~OWxVBbhee|7Bxi-7Ti!!I8#|=d?xfJ#FKI>>A?u^ReL6 z<~NMIdC)k9J7RmzZ`|#a36#)LA~+1H=szkFnQ%Ib5mN_foa`-QM8RFLOA#or5gWCU zD*4vql0Qp0^>jg1rN41nGybTmp{}St?ts1l0hP?zm|&Z96U8>C-sCbk7A->cG1oz{ zYXfIdYJ|4>+_FC{mt34*WUSVl2<5Op&`eJXW)zxD>$WiXPCFT5>^adI=1VjP^23&ZVQ z&`uh*1@ee^c6um4v*4LLAu~lnH*#E6MxKWTc?}qknepa6wJmn%2jdT0pkMJwZG)eh(Woi+LtS{4&)9d(v~p{yFP}M1jzC9e z)-=-->3(X8s&BBhY*vWB;yUT`*F z+?VNJO0e7{e0aiOV)JmaA(#Tcg`_`iaHJ;|QcdhAS{(M})TBqGX>u#sj_K-BH+v}_ zpyU@F516@uArJ*DH-&)gIe!YDn{@!* z9Gua7BX`muz3Ksa_3x3(U)%}0>eb&DJG>*LolGGDAS3kmf4@SUAHOEA-rhoO*}&(m zOg)1A*50#66NH|kWPFjNbgjxzDSdH#QykE`rY(aAaC~`v*b6(YO1he4_Nddnf{lk1 zHEiF)eTnW;09r-dG3tN+P1uR_B<2Pa?h~BNGv9+7El}Xa<8{c0qsV|uC>!7OY$6xU zu?c*EO=)TqC$ee{bPL@z-1wXC|ECf1rlj?9@!8cIfNdUpptg1^aw0yO$l}y+&0k)# zeEw)@-ojz|xVuT^XsXAjo$xze7p>g39QVnI=%k_Tbt}zFw4^5Mr!#cKf+;7v&ojSs z(p9L@&aWl@oDq5zJ=9k@tw_i!k%>?NnDg1}=+m&dnmwooj4^wsbgymTwTu2(Jk7rB zxN#oM>NFUn@{}*!ZBXk#Quv84_u;iiCi6LR+Huq)-h%E{FjLweIQ6daG%vgU?AV|E ze~CW+i8=qTt*xi>pyF+o1e88(?1Pp|DRL-j~Q&!k4wqV;_F|k z>NIm2Tca^c(_-9?b@QcjnM5v)m_seDEEm`~F|>M;9)MgUCM^Y&{Sh4WqAm^5va$ z1hl<(nVM5Nbuqw0NQSRkD1A2Z%*hKs8B4J+c=p3?k-Gq@P?TfsMp{Re2k=)dv1nHU z*o`PMg!@OO&@@6ZRIt!91k4QP0eNkm;11q{&~fvwu)%#)ZA%ug>3)UK6Uisf4Fods zjw2lIA`bDIb^dDDL+J1m7CTE$X!#=ZtBxw9-{HT?v{L~GMYwNDsgf7J|0(m8KQk2 z_eI#+5elF`LxHe-DuROb<7u0y2sy0=M{+PvP>~=G>FRySze8g<9G*wq>h4oUeHD4e zzK-#%{4jMwmD5L^!M)t@s5OmCDHJpImX_V1RvjqL^UZ=B)o$7$q&hUW2F53+dh?Uh zP%$R$e6Q$~bo%o4bvvRVjCT3-4TF8c^b@VBNZgjH*cIM{JC$P`^vAvKhH^LBK1`M!EN zY4mofKJf-|A(*5B2rp~M(APh4R<5{~j;ZSI?whKp&xg-b14X^?i&u?6Vr~6{GIRNQ zOZyVoqe}VqRXpKTZd*%c>!D|lpyP8l7~MfTDE&@xQDlll504PG0;;ek5N-Sn>$+x@ z^a-6;dLsyK)*v^tj0O_MK=%?w?v3PFS`XiTgS$sGBt!z1dX@O^^Tl&-j39D)t=1^; z_%HEBH++x!0TCSDT8X2Tfdu)#c;GiX5d0Q(B>S#fjxyt`Dq>5h%TsFgvGN1{u%n#Y z_Lh3S9wGq%Lz;SG(km&tF3;L3_$*gQKvd2ZW#@?PQw()VbEj}WRNMIIJA&IxnU6ng zZL&j{EjP;d%zv)LbPi63LhyA5$yp{wn!l|NC6$19m9a$gla4jN#V1WocPM&TMb^Bh zXVc-e;YjA&GXrEb$i89zRQJgR&s8BWD_cj65aLBNVq@4VLnT02pqv;69Fp|vq2>O&RWnj4~`;N>PJA-RnY_Lfp^Z z9CVk^!;jLu**`EDPwQ_4Q-B5R1@yOak0`{tfq`Dqj#A4JCa^U~x>EU?&{IOkJZJMG zd)r3Fi$!T})i%)819IoPX?=+C=2-(NIfK&y2M~wqtZs+QQXj~<+wGh-s1)3iX9vgh z_m)7!4*A%ksISEOgD7?S(X3aHpO~Il^iGqkl zz2I6p3Du~MJt+?f^(vygqWSdI z?VG9d<>2jZ@A+DshS{%FTp;a6b+?dj+MT7X2G^Ss0+VxlvZ@5lU=69V<#P~4FO%5c z1~g3S*5illUCVV3#F=I5Ri$L32C-q2>t$->qe^&p3i>Oq78D({nDf`Vl%|zenIf2$ z3nmQ;)yiVJ@bofA1gR#WByXul9ANNFL?w;SQ7p%gEns)2n~o! z@4EEgC+c9Rc?E{h=XfKda})WW$P=PAGaTp(Z$7JjlqhqvONjlPpc_Im$3Zz(FPSif zSm+vPngKapSPbMxT#IZp)PtXMNzSgNb6w$P9&2Qk$*Gg4KXM6zt~=SB=aN_Ipr^2H z!fo!Q{Q{LzCZ9XbYlSxT*G$eVwXL&r_;Vl09`zrp(RJIhWe?Z}ey}T8H`=P4-{p3d zg5CPA8QFtUXie9H&tY_?L(xt2t^z<4DGyyCIzn6K$P@8*)-Wa%P6q@13G9^iJK644 ztXZ{_?0_QPNp)tbpWQMEB5zo9<`^^la_6DPj5!Zv@U|FcaqQ9HN-MjI;dk_SBs3#A z{E(=rp?N-5rph8Zc}WT0JMOF%?Fnnvett%>-&|t6N?VKFNFNjvR?^zTJD*EckWW#J%m&X4iU0yb8j#S=X z-QC7{Nl)t)oYmd0qS8h$)6ybl_C7Z`*xC9|A{H0(znECTIvw}j0XqI@^>m5d8k>NX znnSSfE6XMOcxb4Tm?xUX6u5DEMSGH3Q5dKN1Z~nwwoH9sHBb4m;e&o?FUB`&J*uy) zm=wbdMdc9tDUh*JuqLNP`8lGocuQOC`z%!*D}5^}lBtv;QlObdvjiL$azkkN0rjZ^uWRX8`@4lL z@`DhKm0@Ovb;=$1t__H4hF%@+&>Z<@n=Jz8iL=C|ku+EGTm^DMUVGq;W#&AqoY9Nm z4HVFQUA}X#WeMV}Z!9ZkBU)%dv$~WV?y=T#@Kc(74-ra7$wLQFt4O+kLr!xH>Ec7j` ztWSt&E?3vwcpficGZo|YW#@qK*MaYVWG)F)$5C$F0rZM>nYiaqM;G)GPb>XpG| z@ojKB)ydr;%!QEW^rvH;DGZYmPcYfoZZ!ixc&|CjK|y1{R9X#yq>RzhA9Uhkc!oM? z(2XQXhenJ@#)CCZ7T{^t$4!}!y~RRk^3`B+NkQyNsGpwplEfVwSKzZMX@87kX=B{y zh1-T}I^wXG^=qE&z`BRf>muZ`8y_3^keFKR^9}s}zR&o_JK*leMG|-pfW%hKgnmOZS?TY$4Uan&4`8>+qi)|_gTgAn;A49G2XpM93j-B z9LzENX-NcTu4N=U2NO^nc`DKXA7SP<|06fV(y8T0FqC&ohaDv>>OS!qh>gbBzXOGb z4ImTM9HEvPVuGITE?L89%a(m3OmT~fmxrG%pu1y>pM8_M*L^5>n~ZLgDBbGna7tlp z0`f~)VrwW~L<`jBoL?$g1@e=B#19Rggi0<-yj)p^Zw7wthQ!WuGC@%$*;uJRag>>7 z2Hy8+OO@BKFp>}YM?b8IZj^GoMgPlVXSM0bWNZSK+S_N*gr=@X6FUuf%lKhK6%37Ae@cVqfly$>96**~y#Kn+z;{TP92&44m0a zR|}Sg^$vJ%BUfQ({W7cy9$3mChEX?~Q0eJ#-=@ zswtT8{!VeJnhgZTQGs2(*Eb^6BVyHK5Kzrimxuv_IQ!&I5{|HfUf{6wG`FeNOru z*OMmw&k3uTb_4CP*C{o_EuVR`FGA+}1pf0%g2j+Q6#m!6`|zPspiDLhNf2{P#pbru z7&Lv0aBIpAqJh@MOIYbKwej`PTk(|e+368rd8m7}%A)U}#xW2zPkxH(JQNJlErO#g zyJdf9mHhRj-s$Oqm2m#BS>LnBwdS*qj5U(mpd}(6W>Hp6fBfO+GY;ij!H-qRbkwMW zC-;#t&9*t0KjII^ce<4gEid;jw8rLV6|8>5dqS*b#tTp4|E3j;Jn3tOOM{414cU$h7jRH?y*uU=bpFln7LJDqydSiB-ig9muxlur>-qW(xcx+-wPDi&? z>z1b!&LLWGm>Wk5uD7{`akhgIq&L8XqgHc-k|Nmawtx@8M2>sco&E7@lnS)TrZA&% ztCI$y8tM63qxL^zfJGtV9sF6Jf(3(tBz zg$CaQyHH(UN1vk^VXd~z&(Vor7G5uOKcnn~8f_3sB=MxEQ1>#ULRgzB+lf#~Vw2o} z9?-OMhk{1bwuYKRK-HH6Dd{>LKfK+9rN1d-|$l4zBXvX8Rj`Cwra46>D&h ze;t!;#W+vetXYyZ8Y7^f%%JBthQ{7o^0ivLddv*<3Xslva`}to6-23(D`^NfRCtGG zakknZKYBQF&d6*CE&OogqF-v{^B50$AAVch3CS!=Aj-qL_u| zak?7<#{s?cE+v*Y7z=$dKeerb62YUt6m!n{_@^qWLDo@ky30Zg*;A%n>$V{c?QNbi z)lc{UUv6jE?m}1(>VHCY)$vsi#5VfVpGd#)pTzxp_z@h1ceplpQEA-JiB8tg+<+l)y%2m19 z;s(FJTee$9)~VR01!iBrKc1EveLhoV{Z>vVWLWB*u>dX*@XPtLvL-I@`(vi_#A(av zFVA=ReX+W$xc!O6_wN4wCoXLin6ttQr6bAJl?@BU5gZmc8wWnoFA;y2%gVX~h~||u z$X?2uC7Bpr*QV{=#jE{Ayq!fn)#?(^HG@h(4Kh|{`>UQbKVF0e(&ikpD}|!JB1SQV zcQQD*m=xtpxSGbt{L98vif1@9vwy(5z7lMkwamS^pah4%hpsqBs&H-hK=kszapHUx=k~qU1ImU?LbkYdFuy04G+@pgf-@~(CDzg|97A8 zZ=*uoEqH0%A3oR4k0hG$A7HhAKlAj)HZJB4wl>zrHcmfJevqpEzao}CuXOFl(bxZw zTYsM9t^n8qLp4hHp`8R1_)(r3)y0WN6;_s(eg7z>Aqk4N>*4+$CuZQ=>VK ziQJ^>T-Z4#X*#LC7cur&C{QkY!8!ULBo}3Bah#*NZ#9nX2TL*JqK$4%9c`?GfXQq> zoitKBt)yfup9z!Z0KDEc2C_3Qb5WOE)~4+j3j3Xadnwmc52vG-M5jlpF9rzqZC%*A z%0e4iZO7Hkd9jwO>32x)RcukY-7Se<+#Q2l86`WrhOwxMRYj$Ib+mkHC>+*#OL#GD z)+~H#MM`YU_rV#c1ciK-$2KJzC>gSa{kb7hCa`NaL^{Oy;oaT-4w5$1!(LREgvkqG zAuvoUvZ!oE0VG=1tBNris756t6ajdlDTHdOA%h#1e^da!t4LiPgj7sp!BX9Uin>O6 z5GCpE%oY+dEVAOTT>ic8EPg(*hU{`INYPs(e)=l-{CWs>+oAm9j~=Q*h}+ms$y_>+ z;2W<}Rh6Vn-OwwlumaZD5NMaw=JkuKTLJS(QJ<|)0lN{0eC&<~E*99SqLo-Wa9~Tx zh~x5e$9F;?F=v6JWrwqs}yM1FcWjm?-& zVopVOV~>gACC&T-Q<=f|Z8_r%NW+~8$oVOL7h4ReuOX2&*7jGpQ10&t@Svs104fU@ zN1)7zAf(&ZNA`>jg7=NFQ+^jag!}E^LTT)Rof3c<`cJk-?Bq{T0-~|tMoDlOr`wWc zMuog2tH+7I(8ZO6Y2e12pd)nJqAS=5iq%#ir}Ghygb%9 z*x7f1{`^aHxH6nO0;RwcT<>eN1pX)5X7t2K=#Fwn%{HXcby^O^bbxD@-pgk2)L~2m~EKLFJmLbHDJ$lFM`Y`MQ&$` z@z#VikW<`oUp&_xwZ|hrocR|yXz83vz5!}PRP9+7n$ROhSOTg-zb57L?5%VW;ocIS zkOH|mtaER5 zQFzp;zG>0+d=)b3rDI$!SJ{s0A#k5h2tFSeAwT@+D=<$;8~SZ_d0lGndg9x!|EM*k zS-Z3eKQlSqPu332f3w!O{8X8Lr|oRVtp7V8;csRZk@Jtj0l|vDS)X>TX{G5TIG-OS zBf80vL@u5_1?{;zW&wWqU!%tbX)|ej{>U|P+N-16wm39iw0nghR-8g z8e9(8Y5_Yl7c{3!zO57bdTY?mbM`74@*5nTaipX{%nj5Vp<8W0dP@ZPvnz&^PET0R zpG*Vrq{gWcnd@5rE+<$>@o^K2)%d7xC-@@yTy|M;4+@aoT>EOxiQ^7Cm%K?AS+--R zwNAg|`%#i}S|DsXZ5Q6O3#Y{vwTqcBNe)1%7p@<5G&1(8r0WP;>|;2e<^&mhp@PL* zU`;KRX>I%sKNZ;bX;Ci^HFkk(s!R=d8T^^*X%`nNb-4R7)Ndt(<7e$MSHmb3>dLNI z`lep@08y?wUQT{q!ioVnYw|HKVrgENkBY&%^`sXD}W(`VCvFv;05 z`c}X8-$e-;QD}~rlhWRQ0gfDB)RAXy2Dd_|3@IV}onsh9 z@2uHkb7?gSYgZNrEgR>f9?z-`iTBSYv1juz=Hd5mqU}h>GzcWNpxvILhY3CO0|lmS z*OKCvlhuF*CFFWfILnsF7|^4({YFl`T>U!u^M|zu*mdskYDU4mhr8X4UrcJX1^BG~ zB^@!974G%|;LO<>#>pLOaaQLKO&;;WA3^^2kRT^8FE z`YEgO-f%~9?rYk}9J01_hNS%krbMJZTPI{=L}7qWfQ`tB?LLRy`}p%Kbngki5|TIE z0@lmq5F%EgIyz-Ji)Q~aX5sU23$xcc&I~=4eMD-TsJsxzr2k{Z8zzCKS%+C3cF!$W6XEk2F zh?uITn#dL4?jkY}&pBWz?0{W@bBUY$$qB0phw?7a2vLi~$pa#-Umj6*C(##oW6zV$ zU@BzL%sWmenmaN)=sQYk!sh#-yU0$t-+@IGp1)YdAiNkY`kB-P&q`pY6thA&7X{Zs z3X2+pO6n~8RRWOkl7HGM4Rabw!@A!+aT~r|geq%56nrg5Ea`Wub@#poKZCmCrzZ1^ z+Z@6Jkqsna9N`A9aBX5Vg@OC6zmyvqTqm61^&qW>1pIRzyAth85lX*VW0JDJUY2w< z_z~&8*y14v$Z#LRbU~O^meF#y*TkqyF>V#SptdJtK#h7N(}* z5eaQuR&pn}OAfBg|JbVKFon-@wEdJy{=sc35x-mRZLhMI3TWOZ8Si<8DCHVjh582Zq6U>T zVqh{uj~o^&SIm2GoA^8)bDBwqSq7;RCVU-hU&nbBnC09XNwWWqIBY?#g?Nxxb!HOmn(Z#bqyXZC$x9(EkNE{kxH*FS}C` z0{#JA!Ty>3`ac^th4VSd4(88pf!tn?JD{9-T%m1{S$-`h6kp~1~zi0qf@;EMw zhRj=lSD4LL^{PA$U&=G;wiY*?HUZ4sT-GTmj+>2`we` z9?uFclxHp*LU|!_+-cUs;||^kh4a1o^&`2|Wa9N-PsQ!G7Oz(Ner9(~$1w8#{c`UL zYI7Y`VGXhG_RF{z!G~&(hdUy&m3W!#MpV*Lg>~wrm z+HugYPw;-s>vd7PjK*goIy3{qbjQ)U%8TM&vdg%dEi;Y=3H~KHWzM*Z8IQ|dN$R4O zeM=5gpq#^e=rzNo1I6W|DeiWE)e^t!Hg(9d*)Y&OEPQmIO}Ien3g*e3jV3 zh=#?ZK3#?RdI&;8z9ey4V@&CG#V|{$zRB6;_c&XgJ4y#lsoZ;i9=Hvc4K;OzG>fG)Sa!b54j9LD9TWQk+0OZ%$Q(6vuR>RmN&L8{s6}w+1(P^I=Bn zBCYfJgJ;?cLQF-D2Prlus<-8K-a3wq;Q$i9uUZ+e`Nx5kkQubkbl(Dkcl&@(0jwPG zCrC>BvKOb_!1$}Q9I4j)PI43^xKQ#zgvj}S^q zvP42LBfl(mQ9K`kL=Q|3lK)KNpj^>OmOPe?D;c$Tl$4U8q~^AJm>dj}JKO2iv!G4=pQ}%bm=0;PFCbmh%ETj2l z2K@CfWSb-U=j9nYbeHC~#{5CNxIphKKo;}WmG6KVoBub^|G%DR#qYVz{QNy75dZCF z-Pz_}dh>t%KtFP?bx{QGP$#%=`d|D>zt@pWEpXh*1z--keQ`F;)FgGF2*D2!q zmQb1u)*3`U_WrOYEm=uGchm%G^bxEywpKlCfgX^UTg}sYDnQVmgl8k?hus?xCq0CW z#*=+C8dA4ZcF89kv`WTrm>r*D64E1xNQkYdf7K)>o6fWBi=DKedM#2dX<#aBG$;L1 z_#_@#HHi{rFr%Fqs`EBF&;9%y#xRW~i|L#DE7Wq{wsePy9{7(3IFMR87hEN?R!}_yI6H}@`N*V9&hF8>YDO zP0qIlX( zA=yHk9jm1q!-cyk)70sMsyVfA@56d>cS=(oq1zOhC~TE~NW#vG;rCdUkWGXQCUl2* z=#&W&Jul z5LyHYeqC{ka~eJ_-ed@Mq*r!`l(_UF2EeYnE8HNOuhN+fmgwVWqP8|Cw~q<0=KI%o zd=N;9NFciBjf&(?Up|!!J#Z^bsC-Qy2@k{d#>zaGuyrEE5@4;ROgav_eG=i-e_EVz zAvt?y{lJC5=>P4v#m(7@R^QI}-sPYxpyx!Z-&1*7G##oXrX*7y*wG9L47vAwx z7+a%3@7ivd<4DOepyR?^2{e!kdql5@qKKwBXf`MwtV>4tf^q|jjVp8dye0d!_kQ+A zr1vVl_ou)e$MJ&_Lm%=c<|lMayAAIQ8U6%`AjpA;3||>Esl$fJt(fq)pDufn}wdTP!jreHIu*zjAVh1%Set zuh-tXs1}8&)>fK@F7REdG;uUP?a7EbP)?E1DsqBkX{Niiz1=Ey{bYBfY^kp{q)aZ0 z#Enx2*s_m#4%OqUb8b<-Dvmg)F&uEGws$dB2qc(KOM_;iplQV?O!EZ|lQ~goqk7&# zq0C>&O4w{!`g!)${lwqj0&h=c;cDxEN!P3gYV-t?$Op)#Ap$^> zP)5JoxqQi0FibvV2Wb4{-~ohwLUB@sL+!Wa3{I7;=?&h`>TwB>{15VYkC6#ShegTF z393nOWoKo<>ll*Lc6_n{bA5@MB;s@(`NI-B;`FL-TA_46)Pn6uI6$&5i+P^nh+Zir zX&H#><5HFWqKp&*P(bKa?E_lHl{>m$grV(rE;F^Ph+sqzpu}w(9A~$pYlW8%+5vTB z`jbgrAq^FX@5gr{g$DAsbF3}JaeVPLIXGFcjnx=5m6j#zA}%-@BD^>C#!Kf3I1C-5UHc! zgKZtR&KJaf_Q2hnefh|>fp-B1Qg)Mp9C$<$R};jnMZHW?PJg86WCY1 z)^+^0t~h<952CQ^f$)_l&yN0R_M6K;+(=J7*Y@k1$km(J5cC)z9alCvmd(#Z(LrK7 zna^GNEz3>bS5FrLVhk75eEexx9!6cF> zMu;-%{#F1yn^s3VN!(v~R7 zE`?&vSm>xOl=qH2i)2UL!tKa`!fl4wk!Tg}8m%zU=0FbNr6E!?ZK!62fMKY07)@0q zsv$D8rddGe}5QSgs$ zRd`+7{*~q3`Et%P1cP8F_wlG+n!X?Q)O@8_V4`IXb$n}@G$iLCRHwk@>Rn=!OdEXX zgXcLb*oQ&O21`EAhc}@Z;%Beseag88H_gDl0x4M7>+@c9k*b--HpKyi43wvOulETv zjM?P4xb|JKEC(O$lf@z%BZpnWUN3Qu?R)&g#%x}Fah|uD(YQJ=5>{b<=Z+dWJ%7^w z^T`;kdTfso$asVT>f`O?0Ik=f!;WuL(U<~_K3SLBY5yZgp@jVEN|zH+k;OS-)b=27&ZINxsJD%Ow~cdF_M&2S-!)xX@61wJ_|XQ6F!R$r zlA}A1`vj@7o^8aO2&xh>U%zU24M(@t@`=ci)=5gVO$uRcp1A`0n4u;%3l~3;KtkGw z9L6i2oHxlZR}ykQHD9i;x>4ot5$KMHL<1G?=!yv4Zi*%pNY)xC7rZ#6-xRjtrF5xx zxVZ*nN@ePS=#Vc$g%X^)wh%8?u`V==&C6Ivj-VY5eaPIn)uS$os5V)5-$|1)pxyK1 z!&sl}K8$*#m7R3fE)~+5(|{FiJ+;~lJu<3zSZL|s)Ng~yOLckGSJ-5leAHf}Ly5$O zcPA@1QH-{xc>{rTDnm!tN&3TF1(b>u=qIU<74Yx`*&8_$l-;GqwsusjKNT@NV7V%H})ONTNE0GL?Z1SDj~ z;`2$tM}&5xQ}k(K#$?|Ju)e}v&I_U3j+5tRa>Jt`mJJsdnGCUShg+0I(r*L6J+Vs5 zOzPFO*Td-zT1A@+4~qt9$3`J89OOv8(tFPiHn?9T71Lb`%har}S4zgxp^80%{FOub zj%OMZK31ELl;HZ@5Q3A}O6R$kQSKx!I3ZikzY$O&Vrqw`X9Rr#4|3*`1&8M~#pgRq zQF%#Z^SmfMmY15?PEQ%;ExCrdYk6?5%%G2Ep?Kg>P}cUx;OPIDjD2|*R;uq8a(<%% z-KBV*?XAqtCMcKPAYp_nBFY^I!hk7xE_14G`I`^NYwoisD8B`DPnD?KqTF_I#9KNR zFsA7RT7F^uF0M?u&UGTG1A0i%Zt@sRY~L|)mceXUpfSPPEu{PVtSug!ISbL|e4`{6 zW0KXEY%uU~=w_ttMlhU|4Vg!EG*yMzyQ}n=|EM6JO~am^RZ+gCu6aw!()~L-Es=}u zS+MDURCX3%QElJfr;+XsrMnxH6zT5n?x8_qK#)%9F6mC`ltxOrOAwGoQr_X`Rj=Or z_xf%hpP2#nXTE2jwd0(#_F84-dXj)Q?^_m`tuvE%ZNNQCKS|;Qmw$nf*7Ki4@Murb zO0{T5G~$0Iz{XSxIo^Z77WP(g0>vv=kRab!Ss?!%sZB@>onvN6&fHzj$J$E{N45x( ztF7X$Ie~9ifS_kHzeFnguVfw0P8Qa`Y}oL*Dav*OJz3TQZHfP{h<*R7ZU6unxPz96 zJ*qOGt?;NVyJ{uQ*~S4*&tL7;+2*J9OV7C_Yx5FELPtx%A&E1CQH$2TUta3L5!Fm@ zY^mW-?6!10I&bOmo5ieaPPSs#KRu(^PP_e}J2qsH99~89e9j)}p-C~|#Y1D@VXQJ% zluUi`GE2TZoTFD-=O(*RJgS^73!FTIrXemR>GtvIpe_~~aOhu(U!`q@5t0?~<53}zh^- zn1{FUs^YDWa&M&f>cZdU3kyZExEa&TvqBS$Z{P>P6^6;)7Fq8u*lWx`#CU0m&6UE9 zUyXPg2q6z%j6j`KSALPVsYOZu0DaLh?zpkN{NX@u=-n1RV-WFS)XLu8y96Q})hOS? z*Gniu9wHB^G}49M6VnBY36yA=Ny05A<9~u@q#_&C6kL6(1$9tOfFj;xHlBBa<{)vs zOoa0})JUS0n1N23_eH;N+tNt^8RQy=-&1a?ZC zwI_SoLqok?Uq9XeKVel@X$^&_%H5TjsoSW#n&QGyEDz;!XLg>masU>nMQ(hWdbMWDh=Kc zZ2-0*S1AM!8$OoKg_<0g#hFPkq28lOH!T?0BlDIuc6 zB;DnCG|2U-35d~ctN5m?@9GMYZxUfn!O znDX;(fDnp2IiZ&9(|-u=!P?xc?Z@XW0JM8aooa);*yL}Idsg=J_&oeMz5lki7}pav zMT*DGZq%f*er3d-1KDy{hp2iFiFx;w%VRkzJL>Y<7Zpit8Yn$6>UMb%Ff3Bf(1{%T zjvs#5&H$%9E6^{O9kjLM$@G6ML`Z~0MB-XwcCIB{qWlj{C6Pl{|#SuhL$Eq_Z~4`e+4`GtR{U6x}GX+o^7Rg zFuGp{4R4*CiIXW>;cISTTpcYQm%Y{ydOGhJI61s%efua>fHwzPn{8iut^{cWtH+)~Uko4bp%R2`x}!F7EZt*Gl_-T0;7$d3QWY)vZY4w&5p z7tO7DO!fk2ufw}VSl)v8uruZDDZZBd$2d---jUFaSc!^i?H64xujoWvcH`b=7$~Nn zFL5QL$PjtuPwjKIFSO57=A8^1R_jH#qf?WtrnXIov>JkqSwwQGr=zs_>x zsT|>_ZeF}V(IO$PGoHko^I_JH0edp$Hcs*>^OPY{x|zg+v(UR(BJ7y}WIV73=ppjH zZ(0MnvWEkkcik%T4Rg$29*iNjkI`4GL&0=)_n2cQtXpa{X}n77Z-F^ux#Gn9!mIqO zhg#a!F`vLLjrkD=nv2=8rdA~@UJzFwN5iX0(I;F39Vl1+;u2$=jNyfnBG0a0NChKk zMuI!&i%|BCY*(1&ZXwJr0FY4_OtK+H6xkU{7!{b&in)e^=+xQ zjiUsk>IyPpQCf2;g3ZMJmL#I{8RqZ-e6Q?;adz2x)z6gmtrtJjE|))(EQMPyv?ncp zTHoQ`XyoI`?CK?SLoSxg^aatL;*x;bJU+!U=^_ZR<-yHjgKZ%38C7Q&(}M~h-t#mz zNJZmK+l46v@+6+#vJcP#9N4tt{vm;yiTLa9z%kRt5Z|CQTlqIz7?adwNC+AANU>%j z?_3#aVKr-a-?Pc0m?v6BoAmOI3*>vS!8_?cDBo8*aNtdJ(Ew5x&!ITmdKC zwcI$m5pe#(uRF}(lS-4YEc)bI2ZmV*gQP+;it}PLxLDr~$B2&XaWKVXH%0LTRe<&$ zB~exDm&jtZ@(RtjpK-kr-;$T`!4dYMbAF-Z@ES!~$fuIB&rKzmEKVznmq@iK*w@5c zbZY2+BQ9)y!Hk;ehR~@yz$LqkZjZFSbj+(3cS>f#S2jGRH8Lk8wawjDtL;MC=%z-7 zt*~_9dSGV`Ti`F4cps)!SP#&ZhkAP!>1I1dRqvK8MJb$}e=$A_vTS;?UfzKno#TVe+nAChNAeDY z(u*d|8-#BQ$G?&v7l_Hlf*w8vfcD`0*M{H!4V});7XN!}5G`jnA&A;@@C8$@l{?rE ziI7P2Q67XSt)l1-I7x1aD^)+K=k(qP=c}USG>w;--1-mq@P@C4Gp6Yecg)Fbz2K88 zjsg!yUV_Jj7G6I~?jU|n&Ky9}d62*2e`j&6yGrTY@*Wzyp)OfFm*SIEbD7@M%%`l( z+l#}JH*elbh;qMU<^)ve7_xF}@Jj;2@v7@vnE9`vN(rC$4h;07VXpT*u9IO)^_=D> z#5Vv1k1MP+56PB}j_ODrR8c@&%1!?WRLARqw|a~%h^OIPSAQd4M;$w8AZKz!4!=*) zO~&aF9Ii8P(M3H>)T>%GUyPjtAN}c5otj&WYq;QYEE0S1Da!@0=<*{T;E|ZnQJx3G zB-8u(wtTt%WSq9a=jts*ty8Qkcj=Hv3;~{RPOOcraO&}HzGTP06`fcibAV?wOqgxz z4@kQ)77)YAN!2Q`uh8x}VWhnFEDHoY!yW)*#WVdJs}b8dW^pVen9w7wGa5Mt8{s@P z7}W0{a$SYV`Dp821jEn zCTj~rru$b{3tMA5*YAL@mch(P9ZCZ7{*nO&E~fi4z`cRoJAe)2g92o|J!)A*p9@%`CP0x1Tm=s64 zY#=wA)aRae@nSJ|k7=i#hA*u;Y!l$M`?;ClC`Gzb(o*$7o)wD~JJZawZ3?gl0p?rT zP=t3eNQ2cO{YfKGH-+4T>{^yBODVEyfiASWJ(%{gz&UmkxqQByXAXgGj!)*6XEpk> zY1|vvc-e;5wI}fwBpg zA@J2_)7k~F@v&}0&(B+@N?_*J7}{N(KzHS2wYewx87bojUT14JxLjVzaT?D1dKrXm zZr7iNk4!@CV&XQTo-%E&WyZuxs=k}5Z2*rIJxJzKDGMlhq=?JW!f6F(?k=59xkc~p zC-*dKtFe%d^POam0iV$Xjj+DH`n%MA!AT2RW_N`nLt!iIT`A0`%Au|+2DG;l3cdrj ztP0tmWf2=oXw6XwxfwHj>xVYYI+ZG=3r(SG+K0o4nCTExG!_uaP}f$mNEr^doxG%~ z+`bstT}1{?*XL)hdZgEi?W8aJW&i@tS@lP05(Qm9c=CIi$l_1(G+0EfBn^d#JpS;` z!yW^wE8_SZe2@6cyDirt&&+qhRC0TN~wi*c(#X)$#i?nV(!QKGc@fO7fjQIA3tbz-J=teWQGZ z^l~Fl58sZZJ($H%io&lNYzn-WOd4adaHfG;mJ$Z1GFw`hji|oHFdeHSdX?4_|q@ zGMDrPbeAP+Z=m(M$?J=9wg{IGcX7@)ln8UJwQ+UD2QEF-&0fUF!j-yN7}^OpfeETc zP7gGk2aofpLoIMqJ*f_-Y;PB3vj}opTdVLX-%ohjX))xv6i0Sl(#JR(N~B z+iI)JJJx(&I)GD$edMf(DZADZsD5J`g{$f;-!j{2yWL)YjJ1)$gdIjSj5vm@5uqlW zqt{PB?IXkOu!W=(WkoF+9g8J|Usuebw}QIPX>w2$Lzk?p-OmA0$j+3vrlwA=rvUWW zbTOD8H-7_R%yX)?!uLRfStCFh702lspA7HXJMI0fWM$JR`6n$gD{x&&jpLF=Gch7B<%javHi6=B~V3>QFSUS^CR5u#ZmmW|I(L)Q`kk}?zqhPfjOqI!) zDEC=aELMX;U70wNN`h`R#@!xE(NlT?^n>v}9Q!A*(}ftn`1l;V;9@p=r2Rq2Soa%n z0|~Q3RMh>q`J+puDt@_Rj#gTB)m9ZHCa>ew$9T>wHK1X#TCfGWsxo=B-flgHwA3CW zMDS2-8Db~xu$T#}hOse0YN5XYzn~jz)IRx0+tW{^)t_ALXJsCarKy6Gwe}nZZH-xG zUnU=#miTB*zw6qVPzzFh0IBjN=oRzV77$KSA_4G}h zj+~V)`^qM=3PehZqMUkMsWp{h*a;;aL5*zF5oDQ9ZgsXTw$4--v-n`yyU)pef+Ci~ zj{326nHm&9{y^yPg)m5@p*E)p0i60$%s`=Yvl%;g2z?!{_I+1tcDxSwtQn)6u^HBx zMSS0mF7U@M-emdXj4c5;Aj0+`@Sc<@k26KJEyzXL7A4~mdLO6y}aMDe*{NcrDQ6+l*;1@jR0NIDFEo_SA{Np}i}d~)Z~8Lv$rkMDiwY&h&1 zIr4mse&%u2wJk98Q)Mvl@7y#JLaas>RWJ3;lX7;wYVmszN+(mpy2)*(o(N1kM2}X7kM59C| zUqH8f*93M*-3jNxB?<99@(I7}8h0Q8q(KWf>mCcH>=oh!j}v(RCqkA_vWXv}buXO7 zI*bYm!R7CRQ+{X4* z_o^ExvIf@EHbG9~w`hT7JJ{CMsLIN`*Q!8S8X5icNg*2}xl3atLMlQCOVLM}S;l&M z+khkuarIM+6pgC8_g3H%iJvpBFd4*aR{6Q`-N*aj0z+12u||z@1L?buP;L_hq_qW26TD0E7DJJi!HC^EvXpfV(W4V>J9RB# zwm1UWFCwM(pHZi*42$?M!iHyFo`XqB7KAS>KEPCJ7))ph5gwo`w4p)B&rA)ct@FFx zx*Abkvu92#8uuGNlg+PMz!w-wii;{V*zXei3?WaXHVnU%L`VL7g=5LOX^^Y{@)5ja zyt@49s^bGsPNM>2!gHUL%queU_DlGD>2(IS7X2vGmMe&2xiHo&Ilg`CQNwArX8J&Y zP?BUOzD2?3({2NE^N;?$2Csbg#cb{5!7G{3615HEJnUQoNsF4T;a#VLuRK}pqlvMN z!cHx-RkZhJs)jUigaZOMUjS;WEM-30_n%m~B0LOlZTE+!9Wyp#rHDSpGzd_&#$op` zZ)M@m;j~R~pkK5f0DlH|tLA_Z4}GzP``{tR+vGr#X$z?ZxTbY0(P{D5Pd_M5FffrH zFZyokC>P3$VNcrcDAe{pdGr*H-_1KW{m=@ZSrYl&SaYtm?(nt?KN|qv0?OgOWV!;E zNop#v{^)s>${`!|ZZUn9t`iMIu2TPtV60cs12$@vN2rC$tck)(HDM*8jZ=Iy=B zQw~eOByI}{wM#K0y%Nzgewy0wkkd)u+AV9p*R;P3__m;$k1_`?d2LAzrX>>b98yE~ zYGK<41-Ww>Ugvn9)_D2(1QyV18bgu{y-v*C#C}6Yxl@9xCFuR-dQ&w?_>~+-OzT^% zt+`=;Q9zS4yv4(pO!2DnQedkKVK&lUEt^|?@e5@$hr^|E5L*0F<^u1wK@s@%D%7@T zL&&nGTwXDw^dnpGuMKVUdvMS;6<1j?J@hL->`Ye>jo#@ZsMnuH}Ea-k8 zCDfXEC8MBVm6U>E?;~%$B(km!8*BKXsRm|Ed1W33fR4(k_10AL3OuA%oe-kRaP$EA zI>8-D=%)5!Na_r~F>O%l>Q>AvAS-Zohj1MGb$Fr{HXmSu$Y}vqxvHX(s<{3$ablW1 zg=LVAm40|6yz-EGQl>4Qs1N+JWe%(ESjpVy8#zxh%w!7hXf9xQN6uPzo*vGx)9MY( z@u5+U7La76Yb#AJ8&I7YRm!pxx|aJ%Qv^SG2V-UhAq6Y$JIXi}W)>yJ3&@7gYynEk zWw56-5p}PcxDqT-H_-)rmMzB5U`1~HvTJD<%2IF_v$*s!uL;AYcP(ZTDW$N_NiQQQ z0^Y8Va8AFI>J?r#;%4H7e>-WjldWs2xKCLyM%QW1qSaFC*{ocs#{r+|buvuH(fc)j zlODCD4+2+oFT}i`uN?3Z&zw3hbhnJ2$Cy2;dpW>%g}l6XaP!>(_MexkkA8Ed>11bT zZDsLml>1Q8wK6kYFtA$D-#@$hR{Lw79ne*3++!=pbr31t$PpEjjar>$bTJn`%qxq)KzzcS9Lf?^qpc*#k5hh8auTPsXhg z?C__Ps*ZKEhObBBO|_iq66M{Ys!J?=kJP49M8|Ns4np9+Sd`H4R)1_9-n)4|+`u-y zlm6>#ok7=+GWZ)_> z3^&Z%lxRgrHI?A=vEbm~nC50atNK!UtEE?aer=_0geXTu7lOllp>Mr!17E&L5ee4p zv|DQhl@2z5Evge4jjKdfobP5-wy$q2BQ_&;?lUbouoa;yQ&mK>Z&#kMJ~rL6)^ZTS zcm4X%n;k88S+9-sIrrtWXwIIwrDTMY)m72PBte(uC78~LSfR!ii5ZI> z>|1tp0j=g zq84CbFK+kr!?pEK)zJ-P)7eM*?qYI#=)PB}=SxePXzl2oOHT(oNuwux+)0AX!Q6bt z=J+PjFRDX-o~%-T1-)*`mlX2j7?l1~Lz#{=MU4;FSf<$8apJp}oRvp}0}&HL9z zC7~%KPcOW_jQEF~v+smiAp6=?+edWxxYjk*?LRT!IWmdsI4(XYheU48Fow;{Dc<~a zMmTe{RQKhAIJKGo1n~lH50=2Ui_QrTdXMT6)N+&|$5QF)JNO3UF<1WB@L?fV1FB^> zJ+x^PZf<0e3ru7PZaupcuG0CLy7^l$zewTJ)>I{f6n3?0tEZb~lChN>E#Avzq>X$q3mL zofSMxqI3tqh??XVP~Aw}ZPeAVnFww@i4Ij|!bqv8q|GALv!~8P9CKjBBSsX)Pvgdi zFy}}%N{->Ys4z_CM3u4eXpMP{0lf7#f!$+yy{_c&iDG)Gk4M9s^Mp{6P5jHobe!!7 zVoy?UhRBc?1X!>SqXDX@eyk>9sHv>@zza*kW&DNq>+DZ96%%4^dTPe)l*`zmDyMm) z`X8}S6A7GgiDMyv92_;6!9wI{093?Gn6O}yJ{U7v3=3gDv<%P^9$vr5UGM!OUIjKQ zx%MD(S`S(nhF!dAE1MT2&dykicBUMHtr;+LC6##c&8%;*;D}yH$m>du3aaI0tCqG7 zM{ITKR)qjZZh-ZC4);OwLfX6`wP2&t22Whw z#EbNW12aw*hqxX$rHml1&KSh>%X|x{}a0euQs7n*gEK?2P%%=zPlvT=T z8;D8@rdzPE9>kcXRv*(YB%c!iQ5~D8quktj9>9AuUC+IGQWa`o1}0224djR9sMhJ& zQLoHtBeP9d#z>Lder|7<&cX!W4ko2FIAcPkA9vk2sZtd80{vW&YA2K>0{}k+tTdgJ z?w84}VmhH>9sDvS^gI|0HWoMW@&Zj~MhsI+{mRuzYe8Jz-e5;23|~=&(%_NDwZoZl z!94oFwp`R&-{fVnCs(Zd5`zvvlAk78fBW__i!FF8JVweP`IQ%?_1bHKRzMb)so< zR~!#Y@8bNcBDl7b7@<-Xd2+4I!W4*SXpQ4}_UruQn}$ zI34CX-`_UkNe8q8r`Jwr?L9IFL;(gh1Jm0Rv{N6pPAuR(S$+Kwytk(vLtP^JoZmaq zBs!^qSvE8p-1MKmd+o6xILyKvq^B}yOE|^4&-x(2{6^$(>`cD;knWifQaG1?Wy7t; zv6ikC*cbbl?)0$a4O2^7TM2fEd1Q4Oe&!4zdwC(;n`^RW&gTq!9bwFZUhU%Do=Q2* zJ{1}RC}8_Qy`dBK4|?vNuMFkV8*WpI!t!%Fh?^BTRMYZeJQ5-7^Y7K}?*l z*n}=-%m*%SU0WUY(wIc|IPV(54rn1UY~PXu;kB}uQHt?yu$^E*Z|bYe_%DBcL82pTZzyX-mU%G5EwW2D z#;k85Y9OBnluOL71jquV{WwLsboKj?`2+OVgXW>4&|Z3o*jJevJZVhzJe+Zz?VK9x zb4XMn7K!n3>%%(4CY;b~FFtu%Ri0LCLsG^Vl~=+X2LTJ=NPC2Z3zhjwtSf2-yYInp zirxrV=9}`qy=ba2&9>;&5*V8mn1hZWEtPS;LzcOvz~O=f;j8P2YvOdQuO;;qA&CNAOsBYE(g2$FwM{bei6I2$h%_Y@gI6Q>0KjV>47S3!wh)d zK8+8e7Bs>^{ZwTcPiHK{NHCneg)Gd>mUHO&qO<7b6=@0l!LYSJB?r>{BYs%@)z4(@ zot|KUH(WC|LG2c5$Jb*zh4}(qLq)zC^KCU{%g;gCS280@)QB?_c)^{S8bqI7s%1VU zxj;UF7)tfhZ|Hl(Fjfp}mgxN9RaTT$OKA`SIx%U|qm~4T`1M&dX$%@_-+=n9KF>MY zWS@r({G@mfwHK5Pq))@Pj{7z(TR!fz*C926Td>N1cr@D(wJ! z{8mW6@Qwt1IwMIW{bowkT;uq%vS44}-RvmaRg$@Pj|Bl3V(i!?;6Wal5~AhgXwsOR zfVb=UL5{T@&lPvYDa95y!MXFOw_sl&UtmQ>KQJ)vh6vS1`i+?(H@cD~|MJUlII|1z zmAjWdB%Xc>AA?!_hrQBQr)DUrfyiNgt+<2G(nuj3g@?4*a-`Di#UqO; zj0w?tbC%HCQ!omS=IjNO!|9w+o!k-B?^vzfX>V<5el&@ghRE;d37Ld~#Wpa<*Vcwb zlKwo)E4WVf_%db9lbuHiLty zV2YxWKH29*({P*!z~7dk8$;Xv>1Qz^(FrDc^wfoNOYW8>O(EUa(BuQ!23f+IB^3#R zO0n4C*-_2`JFC#!R7}IjR?@h3HaccqmYvcITBYf-6UxdZjp(sM!r*#u@sf1wBSN;J z7^BQ0a;ah=^FtT-B}6&|h_sW;vmrTfE+s985de<8neE!eSxkdKW4(M9l&IIV^5o`Y zp%vXyzLH&d0$w-ftv$U*DP*#Hu{;}~=DRT5dIMHb`Z8s(Xz8OwsorpFq#AryN<8~IKJ6APzEs++5t2Z9H+ zh*Q-*(~tO+R+K}UklV|G476C62}7%CjOQab(>R|ks6pz*nU}3D!ZTKw!qMPEt8%Ej zqX+h+nUO$qaM|10E|Q@z!hLl@oXyoaXpz}q zjR`?8f<2VYY&#!vML_P6O)Km?UGFgTSo(7r84$zdG7?PE@j19M;f+yy&^iWpZ?%gL z;%i-ihoa0Una+6u2&HRva&ZDn!;^lh0qQQC@u?m{HbXlpNm)+}rGyAQBpv!A?L*L} z67P=%y%aP@Jj{C7uVD93o==?Y?y0PIdNJRe=E2A7F8il%3q{aYyRn1Jx)4&k zua)FpMMR=X^`A$Mh{bNdHk?Oq7A^2RxYPmNRl(YZVKW8z;Wg~47K-?;8l}URuu^BvAwg*Tm^%-Abj$D$ek)R@(a4 z=;5RwJ>w(6UuifK)&o6gQC~$LGlN@o+Y@k?k$giyiZ5!g#R<{03jHo)`59{`g{4gh zwIKN|J$leKY5@G}dKV=T+$YG?lv&^hzMRs)i}sMsn4zd?b2Kl@xcKLZC((_qE_agp zl)wcz9&!sr*T=qt+@Hxmz8II;rhEUsaqYG5u&iHOi%urB5wAa&;8pavgDADm1pDcg zkzi0JIVED;VG;Pt;!Z!lliqpML8K%j0Z=lx7?@B$-ii_Be!fkj*U@D39@!kRc|^p8 z36QstLu{%hhmPDRxx=D+!WDK;I-8FhKTK76O4rcHG(7IhB1T1tEKj7`yNZZtV0hQ1 z!1gLc*_o2@TnmkRj%?w<+a%sNYjjG890^5>C>rHQ4M7O4xYQj`ciltc^ZQw6F*1<+ z(K+Y*=R6mgmT_wikko;Nm|?L*qF9d}?5Os+Ae9Bk8wG{qu+_uwU+g!>JUUR^+MSYp zrF4H z=`Mgypipv*{3g5_fn{58K=tFu1+E~J_3;)A#zPAO-0FA|9a(^XEpBItj5zeO^KonP zL*Eaar7ijK!m^CC6(-97QKZh-eEL|KG6<4M#{7v{RIad*&uv6LjW+Nc?M9fyQu?DB zt!x%T7Su6J5@A~P zlJHRO@V~3bdM?`IJR8C8S!kk(Q{a5iu{ptC7qz3jTeFF~9OEuRhc*6LX~p(sfIho2 zi$e%2s&yuQv6^H!N!I6)wDZT}iNP^tXq4w4eVFTZrt4(7NZ`^c!ZUI*qk?%kJp~d$ zk40L8JF_A|JB;6^i4Yp)VWOCMQh=kKaR8`t+)$LVC6}XOz}7IAINrFBt`f)* zBx@WkiTK=IYK>YWUOxvhcy#*=z?-8AwEEG`du-WbhsU+ZiU5MH$Fl`Wj8iSO=Vj)D__43_VbyF0?F9+e z#8lYphlV0$$Hf}MB$;EhRe~BFcA!YOx9w|;wLXPNPV77q$$NhT%V}63!g3X(m%)Y& z*rmYW5<$}C<@BkUE9Ak04mNa-)S94Ytrfvh#L88dF@bZ{c-E;;4Le3|4HXXV+6X2z z!#O!(Q*jHd2=t>c65(FpC=85DR)16jDF?6axsS)mU4ltznmmbPsRO2Dr!}fpck?Bg zz~4-);OXsq&tU_7yFsr1uCKvFF#bvM>j{aOk%eM}+#D&$ErT5x7XVV~ol}4XY7E_W+u^iAx|2NR?i6xI3xFF}|t;E^dQZw8|r#wk)(CpQE6+M z;N@FLIccaAf!%dN909u6IXxbb9z^6haH6TDd6B2dqqFjBW{`-1{7=R|+Ou3d)9CUS zt`rwVX>aSjf;blPsW;^QNFRhy8RVtwmKDs|CO<83=0xfLiNwL6W4O!qi8Fc&nU$mi z7w_{aDb4V!y~8}j)EE4?%4OXY&XowB3fnlR0XSxR8~zke(XKTSP)Eskc@u81%!7n| z`1^!?@unR<(UeR;VUsj=wAF8^7Ka~QH;31I6~c#d78mXNj(zqD&=6kUu@7WEqIRn6 zzlL5|oQoJOZPxC4nTF-l<~}>oo3d54dBDLmeNkv?tub}S$YgeUxq>SI5w0T=YjLBF z)OLZ`hC-rmdKts%w>(J#na$}RnnKo9MTMKn8NY;EPUPE2%1BcQgW|#QyePWmWP{lJ zU3A@RU7wTXm-^$2LojkAOWuirsA;y$OX!uct$f=tTQ^o=>&p2B2KsqY3o@o}{aHe{ zkjT;#r83{hZ5WSRTbEpyy#()kG{oi!?t-a=gjRg4YI-ceZb~SPz!vkW+R4->h>&Tj z9oj78m;`zVHf|lL)?n7LdbbR;`BXf`G43gpmX^suT}W~nRz&7s&p7vaqbq=zcR$ix z+Yx)6$$5k)QK-@OD!w(Km_|mS&(&u}Z?G}nVRDAVLC#7Dcup`9jMNs&i%$2fV<8ga z&AhUIjB`jggYXUihyjP5;*Gwm&hsd*0@bhm4aJ?qYBo_01x zl7vJLC>3;;EyQZa2P~ajur+aXWU#Y$vaqwg_dm3= ztyPu@oxcx@qV^zTx7%gIdSSxUA}hc}Lw!5%Rc2&mPItVb#0V_OT}w<`Oa+qXT|{-W9e135yjB0F=0}l)5ls5`lK&=%I|bRln3qL{+1062}aK zLCS$1A#MqDq{vy#j6h*|p*Qro_G1@tAq*YbPN8f0&Nnf-PKxln79)Wv70FG6Z)7&i* z$Ab(~jZad0=-=Y?TSUx09yH|{Mo)c=+Rn0qH)77&6ShJ>T$RW_H1T3&qNcE;uuMR( zTCtgNHA>DBP%dF&DR>p5ZeP|I3uH2=w@sL&gY^t*=IwG1CeRCil%_;SWt{^prW?)x3X z8*gmkPJ0_xy*__vi*77Hfs~Ha4riGdVA`$>xeMgL|M}$?r?^*sJZZ1bGMEJ9StG9S zO+NJH868N8e0jIU=Ysk)7!5J{ZT!k&iQUv)QOtGMB9K$3)0}V_@i48|7FYv*hqiD7 zUbd)*Gd$AA++o0uuud+W?e@`DLw&<7`Sniod)9dM4(!GT>qMq-TDF47k^3YA;1HOQ z_txV}sdfoujBWHX>mBHv3c@cylZt)r8HwKXHa*!0(m_rLyT_4obtTge4V zfPQRjVrt-Q4YJU`=R&%Fe{Y39Q1_L7HhfU9_U~n1C=i6QwlgxYHUagyZ^G|?PXcCs z`nn$#^zQyYXmj58k_%q^z0y~c|55X+|L!!KZsHm!AiM?0fA^=Fz)et1LpwVsM<;;6 zeVm6MHSh613x)swjbLE=LPww${ozRbyL$Ic|E=r`;bHx~-VX=l-x2V>RR_K93rYPS zgulkQpBwFOHNiknhQF76A;13v^L4oUzbS;@8TVouenYwUr~chxk^V$F{twdsn(A-7 zucy|dngsa@6zc~G`>SjAH)Jl574(xIC+J5*-yh$-vadXVv#qTO;HNYH6|4&;kwOLP zB9b8Zz0dczk_&Wx_$T16j^saq?-4(n6!|wQ=yhLc6Ep|>PO%YaNVof`V|W5reE1 zXF!cAM({O4)8EvB_S^m^&fElG;bdTTAMopk(640dhvitkpbotX3f6ibJ?vWn4N#!e zYyU~MHLx*pv^OyNH*^*zspkhIFfb0i*uGU|>|=1cP4p zg+f8gjNfTCHUW*UMg~qM#{cLPf}UvUlb}ZMLIJs1{|%Z89Q|{so#A~BIuiiHk5qI& z8vGvmv-qDo^Nqys#hU^^jr|YZ0?}lh-5}jLpuHBLhW=i1fsZBsg!gUJ#qV^2I`8+g zFC;Gid#;7uKSVC;I6d+J^)?jH2sCF<{=}A2`A?yy7S=yo*k8S(wdHOQG_J2VA?t1mZR==LErhWBhRFDZYfz~TO zbHkkehptgMvY6;Ld`@Q4>H$4A<`zI^8`%9Q_WnZY&`#-RtpnE2O zf7n0+#~|V{==keFT>!LP`(AQ^pZ*MJ)q{z1-CugufEJZMcUS8_pg9A6wyS?Cr1(kU)3Dzw1Wn>jrgnh) zj7UGr1a>$>4TB`|fX3*b=f#(QigdF#va|V*_WXO_+84@5`VX~#OLqFJ;9rxbertwY z;O74a_21^LujlR8Olv>*sM)_){a4<#AA<=_X(;uNhmk)nMpZyj6Yar4eXqA>fLVpiS`YZX@K!!iab{&62{t?#j2l^iJ z^YHlhPy0e@gTF`rZ$tDC+*h0UHI~i~rSX4)`xaT}SM0AbE`DHDM*l$N_lOt2a-dg)q1NZ>8Uy$$uR8*OULNGx|4RE>Q6gX#cW4x(EE+oPWOywJ!vA_ji&1atHN? z!hfPbQ{(rtFU0p>sQ({001Ze`=)m?7L?wCD3}0%77hUL*H^HVni#9B zf;79Work53jUk(Zqv3L*`|Bwf#lXE85XMDgZOq7hhhz-WiY3xXc#T&bVS6aqJw^v& z!X@n|otH|mna8HpiPkI1bFg8Q)ZNdRY}$RWe{3H0%7Cq&+{0e3Zr^(AXYL~4Y02Z% z4#*1RVM?#z_=}s2BL%-C#Q}6q_|>8`(%}Zh)$D{<`9mV~Bv4c2dGEvYmCo-ggeRX}8_t@qDgt)_^Vq%Abh&I@ zv&#cWClOqIi!kHlYr7*@KGjr5#pBy4Lpn*-7eEX&ZxLF-NbVJ^&@-ni)G0yZ5|Xt@ z#~9^zj`i1Pl~vAg!8lzVD?)%mUp(p|9@yg^l_ZL&>QDXy>G(5E-*jL9ZLPe);vv_@(UML6_$hCN$hECC8Zn105+{8hI+OcZ&B!C%@9MxLHFg3-g5^q z&fvZ8l4Y=Xvs%k+SIJpMk-mBGX_Wg3At{F5*Wh>X_bt0U0U3H3^ptXd;cY5&&&&s0rS+3qYS+7w zF{aeP8qbp-329AA3d3hT?YLkS^Bh3C1NUj2u5kIjEq&?kG$B|5K`n@xbXL6EL-3MM zl~1nn_bz_@+LifJutqueXhZx%G1u&YvQVf26m~i?3z^tP6*_!>F5**8=YHlE5O#Qn zVV-Y@xtGvx6P{a8707)_SdvkPe{`U=Uf(L2Sd?t4bWC7)9^Y3<4Kv;NP|pJ2sOMEO z>ana^9LhK|eGkg}4scB$t_r^7Ym6H5NOcxksIF-rv_OK*qvZD{&dcKF=H)2thYmrE zmHqu%+?7ma1k)r)#^Z@4V*O4M*&t>uWc$Oq1+_30eS2Dy?vadS@Y;=)i4ycs&@7o% z&oMU}$@+V_eYk&i;J$hrz$$uiD*33kb)6IuZ4BU3s_>($r;+7Vv7kt-gPaVpH7-x} zzzc@z zPw0IE`b%iDY>FWGgz5bT#k<2!=?(lXJX z9Tmh?>GPryQEcSRk>Hosl-{{aZTryP?71apw+#fyPyWGl^CAW*8mTNUq(_Y&Kh}u3 za0!P514XN5PS(%#A+&W)Q0F~y-(>^d@LT<%`8HRGdLHBv_o<14S8Sf%|5f2Z*jOVwM>qSHZs@z)?dm1{QD|W#S~Rw~FkRtnpsF>u z9JJ0!bviu@ZX9H?mOZ5t(sF!}E^%&I7>K-9RkK`C4{vPhlG!od%6yQwZz7nOpI7cr z=zO}mpqt{|q@$2BNRp+Go2Ra^rFj_DBG0KH-cY%^xw$(%2dMN)Z3m)62xuBNTUDPQ zxhh-xwVmeGDyq|`dM{txh91#LdtB*D?(_{VrFF-GC|T1M1!5!La)9l2y*gn+tLxJW zbwFmtOJc>JV$Hg&ILGnf;JlSyJy8*tm?${&Yut!Aq~OXXN|M0pG0}%#awJ#JDeerU zZaAY(kh}R?Q4lk|EQ}wZ4rF}Yu9q94T4m6%mkQDfW|VDQ$STK~=Z^(_cZ|>mCDXT= z=hbc5_*OF8)x&xm&3#AdOjR+L#naJcHI9DTqvO*!CzaIiI{CQtbhNh0U~}3PU5{QV z5X(@LlgjrzJ#I_H;g{EfuZmd)aXez6KbjKINaJlADeIT?#U1!MVyS8|Q$^d&EJj}G zYVu`!3S`Y~ba{qn zZZBA)2TH5P)^nXdq_-zGnRs^ zXitIjpbopVC$jCKpK_vG@Z%H}o~6S}qtfH8s8QHup9e6&R36@Q%urT0t2f)3Jx>Wz z^>I5eTa6_}MET}#d=C`ILAf%v1yoxg-(vAfjt38sMT zguy78TgJOnJ0U|auWt!07it*$z68`$lihO1(IJ6*$=@S0Cn;wXo>Q1fS}q-r1tetR zx4i=gpTXWw3GV|pdfxD?66TyU2<#g<|Fn=01M4JKv&UeKp)1}bua|^QG4MwBs!)=1sy_nHHv5NYk7n*b=2|n+Mp#jRB91cvd*k4lIncaNHa05UzO0=`x z#hlnu?w)Q3@rMB!DtG`>XjUD=9v}~l2|&W%#&J16J5x$Xc(}HTtFMc$|LG8aUg-)W zn`>|A*oZDzo88Q;a)9G&-q;T}k6{=IO$FDZCiy4Wa}1pDFG8*;9hGsKUkhSPYt+dK z4#Jo@j?=Xt@Ju3OOGvYCO_X+UM@iWgZfyW+rFoK7ryEMQCr6%NGD{5eui284P{XSHsT=i)h=ZS>H$UF#NPDn)zX@U2 z%JK&&w>crSzom8b0PZ}W7>T?$`{vV7q#i+o-9T>7*LgD<3#!JQkE#FFn--C4+-tq= zWUl+OLG}&5eVODkq+4YYUF-a{p*xR6EpL?(%XReE^mJP!q9xRx$#?;c16#fnx>afw zvux;D-cVtl%Tcq#l7zzC><{1-R)DcI9_1=AH&r`lHBWy*xu9kCzy=ZT^X^370bX8F zEvxdm!RHh!*EN_O_C6zRQxMrUJ=xVBC&?}Skk-O}b##UOJ_pi5L9vOlTR040nGSbS zU)de3X-^T-6hyASDJirGzBNioO!eDA-DmW>Q(cf!ElH;5JbO2LX)Z8Y?A%~%RgD(0 zoX=ZfrBR@e_|~m@n>N@csUe zS}mrF+V4C88Q+)PYS=$^Co)O^=)lt%;%}f;n@E1vDIAoOGv%KOr`;Kk>GtE3-DvcU zgU3KH)v)o0Mug8lA3JzrMFy%eFUb1v-u&XmC4kM^V{P4A`Wh!czB>3ME>g~MC@i=F zOfA-Bb9v!`g4u@z8VdiS1$22VckT+pNfA7#+x0HK=h*Ir)ba8uLC*OVfYR||f^ptt z;)QOcsu~mTzPhl0Y)g44JNTaj;QeZw3)NQJH4R7R$oG55uMBvp=#ZCPy_)}PHQ`^;rf zw0L{!@GHo7U|y!S?Hley|IFfk$@4Q0Tq1`%A&FWSACY8jnnPtZxn^81k&a6ySmCHW zDqs6YT$|0Dl(%w%rtBT0t8FKK^SBE80{j+NY?WQ{G&5Iod@0Aif$MyeVX^W^lU}S0 zND^^spQaNQx8oc&q9sl8YVD=D(>+{FwB1!jR;-|HO7Wqy2OMR`qrC%V>#n=c)z(+xx8sGiZ| zS`hbklKp_;ih>Jgs&L#0k(Z#QW}Q*m=G~>C(zgP+DO=1z5xTsS5j!Yp=zV%)g#!REo}M2J zjjavMP1&p*?I5<1Raj6C0x8$_oV}NboD98^xv`<7jKs$B*@|AD%InpYdO8+WmdIE6 z8TpPFsr+dQ@x{@%dQSC|uFaZ2sU9C?i7w!W!nf&PG!A7IcgBaA$Qvt=>}C__qq!XE z7MPTay>NFC)@GO5xW|u^CR?P7@aPxYMYAi|eKf1U5DbJ$;1e#WUU3i?lV9@%aifh9 zeLS@6LM2Qy*$kO?ij(FfQ?Xw7@`VFAyJhxE129Ii%7A%Y9n`lxv@&|vZdV~OhGg*X zY=fn$Wo(}^Rfhjhwnlb#PL56vh992tHH{Ke+~mLsIJqZOF;W_3ASs8ac7qJK35o z8lE%~`-1F}(l5GiK+mO-mA)?w;=bg`HK!PjCyiJk?9-u_r-zhuiw}pSy7Ge8j2w zB~3E)&0{z0vp8pThie(bEobM&_d&)V1D=ftRulKwa?5QKdT+(NlBGql1<)9(BGLx% zibt2mh2uULWwo(K_c#e@BDOs8q$>gmMu7jOC0R)PRrHhi7XOwd0AL9*F?D;Q1RSA^ z1r^1ReDn+C^LK%of;g>CI_LI42J zpF+2UI64{H*swX6nAygHRsA?{L{IL}kVdK3C7yjQa4E>;!=~_96}M2O?xKq?+4M<- zuY2{Xuo9+UJ^$kTHoJJ)wSXtlXy=*mnJxpGmP1vtyQgY)Z>lPzkCt$=5cB2GBI%?V ziL2hOYc%^b60&8A5#9!eWJy`n0}c|F%nvdBo%=%#_7qSw@nFdgg;xNm$kva$)z0 zw*pgH*Ms${lzgfVP1@}>40SmlBDWpu3=|bo5PCUtXqdz=77W~)OU)&;fg&DC1caqb zES}7sshNl{sc*gG9~xW{_ppZ4BR*coN7fyrQ_LX?XyuzL+UC|&Zu&_h-Rj`AJIQ(G>uBaQj>&3L0a%SFSLI|ZFOl+PofGl<8Sq3(|O-*bEW!T-wYN%HPb z7yi@re+)NAGxQPpQP4|fR=H_R5G%{b&}fYc#}xP4xijaq^Ps#UE8F-_@X&X81ghCYdX3jP?L?bb4!Nyu6I6&ClQSOqtrkP_t;a4gL%ut)CXsnUT%P96 ztp;I}w&t9JJsdy@1P4!m@SFHQ-N2{#{ysiEiQ&J5`s5A%Jp$nW?~4Dy|8*C5avA^G zBmYGH* zpIEarh7VrM5C`CFQ=&NiL~tN90}TCaKNjKExERNWJ$4F`4@=U))&`XCILk(s6Bv6J z6)?FPC!;`nGs|2x4Z>Ykt>O~|0A#c5S5sl@Ert-%Frg1603rL+LVkNkAR4a4070s8 zWkZ;xP^HHa;L&?5l#Uly3tq5+fGk$x5crrP8aPgF&>pT#B9eTP`L9!e0x+5W~7 z>+4!GH@ut8MvEc$_3WGtTl7AO6q2DS;byYgCd8FoupV>ixrCbrS>%DF$dZ}|R#ErD z5Ng|IMON2PK&Is?xAl_`c^35*#)OhenW|tMcVfCCt2&b|H78Qf%ID|P!D`y z{_-H}aSxheJk0Ag&H@LHYulF>z-xI4%bC;GNy2E1;SKXL~@+gG>z`e zB@j7peHZDy)fi9B%a&r&RsIc(J^ri8@u0KWI@WCGrWKX2RjLtk1qqHFs zF=L#A7&G&Ov%{N2aBtV*$1l6bLH)Bh&IsJbKbWiThA~~v;B&sUbCqV^`1eX)sc93hU zO~lX9bl#7z_I09%KQWK^3jfKI{yGo9Uq|}4hWocSF*P%EwQ+H#cW^Q_Gj%exGdBI# z*qP4C85rQ-!T;D3{u}7uJMg~)8+&6z8&mrKY-I6RGKTQ?=06wAe;ECgy1r2Vj)VX}4g?ckVb;soNBryE4F5tJ+1tA~yEqv-{Ke*I**b5CC4JZEGb-AG zn#cqtQMZmMp0uyJ_*4$IxFq>((~6=8_9}#c8r5M4pd2ju_mq0;F(8z$x>jsuWSsqN zFV~r4?)!B5vduOkh59_`Ua~)XdH3B?<5iN!`yFH3hun_!lg%9JwmDLa%9$wkDqTnz z3s;}XGJyh-W|X4D7pZ7gefT$v_@0U+`%O9Mp6%q_$o3B^X#wY(_Cs8A1uC(lPFss_owg=q%btxO0yU6RMDzg%_!X#@N>Hr!NjN_#N+huwY_hC5 zGHPZw8cXcRyT1%tC1t|bvSkM4wWQ!Z^hXHmzIefY%jTdUPlf0D%p>cTCVx<=nnnW4 zL#3KDklpG}n_H1b7xtOhPQw<$D}=or(4 zNMtm?=+L^tSy_msCbxrbHEWbt(UP<*#L6_-KR-iMA?Ar{k!VTtqBgpKAR5=%Er=~) zWCVsGCFzn-0v{63v3UyeZ_MS^`8O}x&dnO|B2^a2*pblcMS|Z6dBB|!cNo`9oBD$L z=C3_6y;GtHQD!$+*ps(mSp&PeVCW9{)n4C-v7yZvq>U8w@$uE~2)80b7-N3JV(A8e z(zkaR)9_cT7AmQ(o(UfA7Vg!+PVM-&Hf-Z?m#kLL6#0crF66WCzMMBrPq5S`1x@o{ zKhD?)P=N;l$BTee`6;sCxV+AD)mF7%84>sin;QNCbFgW8q9n7sL!5~B=j69PIqBo` zd#Ff@=10Vn6?T-Sm`E>b74|E|y(fR|Nq%X%RLw~_n@`SES#oSs2pjyui+pMRW#IM8 z`1{nsAKX^kK|uh37&VC1)kaPTwEu&rcp*YBn& z1IB0_`WZuRXV;x<+6`^b#9APhLlFL6=%Xnyn#&dl1jse4rhK(xE7$tKCvwa;5ri|| zK#fJKp}k|Wo@CPB?RFQRSh*a)3Jc4{WIt=YhV{_&_WQg&kcOWQZalqFzh7axkpkQ1 zfB4;>OW`JW<Efhm}1VAGVEr&a^p2TNaV4jIek&fpoGqvI^6IOz?eF6|hH+5_Kk5&Qyv zTvH6ORDAs$$j6e%`UFtg0F!{g;7+-fX~6fuw!|Jir}wdOHt8>SA{>}``we`bgT(eb ziY!QB`6Hf?Aj2>iTI}^W8gQ1I0#Im>V;dN93%kJ8#^aG5Qxt_&2ph5qWE0mgGG5g@ zjFGX|VnC2^WQgFkngqxoN3b#nl$t@6LJAbDu{T*mf0_~`*VKqK0|sy_1o*E;10t{x zrJJaJm%-zP=r_YI0BWwx1OHx}IrUMtrI0AcH19?n+7nze zZbG$9n%xE? zqDIJ|=r(!YD08l4#jA$Os5+7tAul;28jHgfD=-t0u*5f?*Ah}091l(<6ue3>V*RSo zylgxxzN0C!dtrk75xgqvn4nLPilGP^b+MVweZ-77l&otaHt?I5ikpLphMyK2Y3S~P zm|vfa8dG4_e54GMk~SJi(^^R92owAgjNWo-$rJ>x#>sj9luF?J#Np>1{R6u7q#*4c zek>czA*)pWk3}Tx=x*gKe7qaMb@#`eXsys}hKuOzCc{C$(x*Ug^>3jy^3l zP}Ah(JTmrM`hy}&@r~r3Au~4Rj*=-&hM)8S3Km?chzIWjMIYC|dFG%i&3A*4QqbF{-KFTbx z9Iun7w756|$ayP3HG%kx@;j=^@fhJ)>0{}pe?<4AO={X5Fq%)Rv1GLXhOG4l@Pd?9CY9nn z=sJlewbcNb6vw%E+X$%i9vQF{6al*+RY*;*RtwNZhRAUyT-yD$%|1 zwq)h}8VaO3h$}ad^CH|XgLU_@HZ}%oT(2F^rK6Rpk$2!)@T{7M?LWy{h%>I#{u->12d&%uQcTJ`Q?zRq0%!>};X<9eNzF3oFZKiFEq zeB(FV%3ajft?Np0C~}vZ+`P!G$e(FiX~cSv<>=2FN6Xng4%T73wT>pd`+ThP;a2Oi z98YdeFC#twQaaN{#^Ao1-D!?A)7I&NQLz&wt{b1oDPH$)#hyrKw0kpRsI09TGVfxU zQs{{3M?Cxr@df0j>?Rqsy4YQeZwQ=jU%aQ{Mjk-`d%Q19aNF6a z_hUDp$;YMe!RcFIdXjuV%Tx0_QPftik}DLxNBL{xkA^@A=vBh(EM~mSRm{n6d5qxU zJ~lb1!s(B!4tfYE-(;0K5kXJMC0lmA-XWD&R1W!G$#}K5!ysz|FzE zK9rSnYb=7hwiF=J=}f&oGNkZ6eV-yER?zBHeO9BI06R`{V1mIfA6khRp@K?rJZXQ{ z3S`cRxtW83gDp(hT}W0*&1!FTp^&`YcTA=hDkJ(>nt$4rlhkwX{lx=uFJ|c|<4m0r zXDd@~6@h+AsN+T-!s)(rkV8XGrG8cEss^8?%9|D;auXSoV>SZGNm@G@{7}B{C>z=n z!0r<&K54f>17jp?E9Le2B)zvS#)4rZsC}6Y$O9vC{cMqK6%C zPq~W9tNE0wVI%mB%-c|LUXAq;WrX3!{V?0~B;l+2PTcqf(dTu%Zs=SwhiPJSSKxIe zVq%WJI_Q#f2@(cE++?GaLEUHNnk1Sd^@lxU21q9xs@tZuccFTzt2oEk#nmO3bEyD?ZsrfchJ2>x2OTR*P!UZi@3=va zvcSk6>*&v{{sSe`mY<~BiXcwHMvoq5t{SxW73I7knr8bhr-vfz<$G^BhIO93tm@OJ zwDfD6@f$v{N31IEDOQ|Bipvp}jMoM=jsfE|(3u#cW!jg=(N4R%k>^@ak7C~RoP&#( z-7xM&cW5IG`Iw#37ZNwOyrh0j>kN2Tn3B(aJ|`8AM>Nsqses(>Ny8Rm5<1a_v#N^v zc-59%@H>zm(DgTuApEx5JB)-KDIbwkoKXa-ok6?NcjNp>Wfes7QxB3A9Ri%KRgpgSj%lm*1}@hYA76fG?(_j)%P!IF zVYoXwE;DrYD6xG{t8_?9IH;~;%0)JU$_vMS96&vmrv2qQg#GH&nMaT~iamk-x{jXo z3u*BAsW%CL`bk+R$+?KPqA8wxL-Hv+3J$=|*6X!=pKs~yB$tXSo=mbj8qSKnvaeK$ zZbf>i&;msMdve{iFhS;;fvU50(i?+&eSLj(mHPOh#Q-h_AoX91)VqZWmqTS$CE~R! z%XfMk+}2c2m#9Ikx|Y7*BiEv^(iyA$zX6BxOe5V^JLu9Df)Oycs9+@S>`5o4z|bqn z_?!~}6649}>kr2V%?g(}hX_joJA(YM#V>S(9H>*SNu-`0kNx%-JW>k1O+6uw&OBsJ z=pbg_D!LH)KX2{9{l5&Uwh^3nIypc4_*4*EpUJ=p_X`bujkLqiv<+4_{FZL_=a2;l za@q=xX{L2IkFUF$Jqz4zl|sjSwPOsQF{+BapJSL#(jVLt(cC?aZh5S(k(j!^pKXQF~-s)cb|6L3ED;fPi zQWMnQ87EU`dsnA_#Hs(f=x>x|us z_&u#(KPPh%N9WnZE6F7sTbgFdtvcMGBAwZE;AL|QM}mk8_#A*d#PNCKi`Ltvkiukn z0grZLSHGHWo~LVYA7Zy;WmQaUuFpf>vG?;S@7aph?qDP)PZm6e+^$C@tzJ^&Bw1RL z@VKl(-OsH(@2hwpGJa1o1-mH zo~*jc&Aem;l!JW9HU@S%WndcBp0Xyzr3gWO3hIlCfUD_IDRtB$uFMtm)1X9Mo-##A%}WZSC#Zrqe{9!qOWE~n!M*ottyeNZgnNYT0kx0WOgk^VlS!* z4Zfhx;1Tk)oYHz<3UB^#{)_P_)+u>DLP*WGS&aDGyFrt!Ui;$Eipbuu`bv6&`>3w6 z8<()Mzx=aEYgIh$WyLm4Nxpo!^T)U&wDwE&^HUJY`f(3SbNZtomGQcJMVvmk1G&)+ z%1ONXvw($JaXtJh0-yWJ-PN-}kDn&S-nd@Rz2D=H)_6l_(h_Zcq-yEg$e}4d4?;Z+ zQyaPWC(Rp(0Pnp$p>B$_ylTnS+SvEGVRYFG`H6k5zP?Uwju-)%z2Vd5CaJPiRa06p zAkNsG*jc~LB}U!e2@$5JWqI@DPyTHx%8A&{=oNlSkKQsCXJ&cDE^2@+Cs+!VdhG}( z6y04hW9BR>2T3M1?YLt#R$_?4Xy~u#c9S5D%3sGNKy`LaYZh>P7J{!f@KTr!h-ySA z;p_c!{1WECOCF(iky&}v;>=@jO}^DA>Phsmh=C*`x!Dy8UVD(CPxTd@HB=Ip)v~57 zqZG$RB7~E~=b|JN4SNB&QfnTxYDtop{SSs=7#mF!R}QDnmB%Sy0cPVRog{wwz9$`_ z_?o8+_2`+ZN}IPcTLve_jwPwe1u8w`bko)tG<&jiR|a|)JRm~tD|;WLd>bjDG*k>W zcmbz7yefdavBn?XyZivW_R9d@3ZFO4RW0UNw8nJLX`K}z)9EweBh|LdKVZY2#EqgC zatN}?MdUWXJ3?Gc_EXvT;{)+Ew%7!HyRw#dh|8)luaq-HcSiu zJc*jM6w$EBHlPB?vJZKMtvN0_1+srzKUgCOD-=?XynrTOu{+EQ6U(4Qg0IasCah9L?j20sS=Va#UzcNc)BTmYvmO z$M!iq&PmFQ(AGD^boQvqcLE3tl$Livk$|18VRSRribOuF;;8VQ7^#nd_N~o{X6RB= zwOPE+3n6#GVX^wKH+i8!zy3fTr6b6OAENb?aj~oC%tq4#luObxbUiYhrey)$jnmoC z^_{tYm-;%QoXJcYEQhFn2cLgy{CKY|ZS@@|Ll|=*zBPa7?^~?UplC`hCjgmTb4BxB z-tGJzM)!v408V$&{cHt4t;vK@VP@cYt^3$QRw>-UfN5O;-%^+n7q#TM zN(o3-qg`~(9nvg2omW5{xwo@{^ePjD7u7%vmwli+*MvQ1f9@i2C2W^q`Cwf9Df^6k z&j&`BB?X2+Y-4*_CL8dm;C0=0)yQ#JL`iH1n0|o+@4kVjwPSLqNAzpiQ-^Ml&1}9p z^qWNf*o<}Fq!BS}9?pP1K`(fnherAPpN_@;&;6&N6hE=0*($wR_Z|O_Fa7QZTH|Iq z(w$6#B|cN^UxWZGuN91LOa#q;;}MoD`H`3n?He>jox=}Au-%dihR?cJLiLK03d#xS zV-&;ZCigmv!Ktjzl-o8L8}w~5?hX0!is3W#OW5jlR{Ne9$gsYOQ7GG>5xC5fxPBvM zArlVV{2wmncXEGICKzH7VMu*;kw;$kH7PlJ2t1S6_Ip=Go6B z7V95dlRJgmoFmGr?n+QIXD5XE{!5jv@0hfdZ|ECM7mL8zcIWmbSgE`Q*FX%G_?bQN z(ydhtv9Ih?a~yH2nYJ?vcj|uxcezIjFqn%AU<|*IJi1hax(^??<-X8!RWZwTd}Dg) z_r58N8+&f0dxKc(d3H<%_y7xD#X^*7L*I_2dwY=CG4?Yc+Dv{2VxJ642cJPP--`5r za(EtsG0oL;ZYb@TmD>N@y*=)Keja{ZBv@#qhx`%gY?7s$%#@vkBU?7TVxV_*FczLK z?Go}D=?DSG*|70tKd0<+}4St@<}soU~e~tBpYosz;3-=iigDad&2F0Q25wq zyW@{(#8oi@9@aL{CeB~)^oMwzfI9>pP1V4Sk^Xd(=;bKE6MoesGrN?(q~q2NAv>VD z%e!lKZGd6^oIN{F9&y4<2D0IWxNMKR-YE7G_zJ_#gJ#64gxqzU1v0~$U1b*0$M*8D zY`aId+bwLR)^B7nShrW#P_#@pbh<+TW`6i&npPur^;d|_fIPtH4cLMuaL+6&N%qX3 zCmhIztF@HzDto$#D{fkx?4hYOgrJ6VLp8p-)6=4H+E-aJ@@q}&(RK`retyz4GYCU! zKi(7}lqK&G3aBm#v#fNbkK+$Zch!NZ<|K5Ai-;eobwJ*+ODv51&L@iGv`bT=tEuQ7@eQh$qoe;Fz(>9Duaoz=ojEwkL*P9`2x7(VTUQG4Ix8opbgH+NyG z@WTkR@<4p^^>cDk+F|Kdoy(&%4a-}LDO0^1#Nc#S(%uux9sBep2wLwL}hfTIX20?RnsC6H-CEmCrd z>;Je~;FOsJse|1DbToSy-ViFwq)o+inN^<3&3+lIhTrc zHFbfdm;|ff;2OEaV;h!pl8y_=RhLvSHVVJQN7GWgFEwUEjpe;i<=<9PZ;1s; zMKq=KBAcJ~>Mxcaw>B|r@8!mDJywo$BHru8&$+I5K@!%~A?9qLdrnJBuH^`BkrKK} z9%NUlBGtfE=!W605kgsZ2aZ((!CLYBE0;&&1(kD-9qQy)jZk8G-5G0q46EdZs0c^Y zfER>WJuCO8e0vM@Rqw#{cCC4mO6C zcC;?09xi|5R;-$>{k|B&_jGMW`#f%u$ySFSu&R}m1S&2%MG>!RDKgD7#&g4S`v+3L z=-W+B^NIigCn{uLjd`x8x7qL==4MT3V5Sq7AVwL=p41u6>GYo?br~8BP`6kE#S<_U zHC(<5dm$+}d<8Tm!zwgsbH>ov zI%_0^;Q^Dsg+=`1g8k46(i5OxC=i?d>+22ZBc8U|lwDDf%w*P#!Hs{GqJ9b9_D06O zSF6=1ktZHmc#hMC>+jWrB4AFW3qf_ndLgv+vMi;uQW(L$FiU_MC@}{F~7!Sj~zvm{ks(XasJVE7UlaiW; z#;B^M2=4)YQAMIBUq~76W{gS~+j7raRJ1G2t6?2*;giYTZBvoT;;^i#Cwun>cyM;M zzgoL+AbKsAf<>nMiq4R{ z(LlPCY{uH-9mn0iydQX()0?xCY?}Qgc{KRsN9`Q- zbQv_s@2PQx7q;+&cj)V6@CGjRp!{j_sL*0WdIozjaLJ!*apNK=i{(JY!J^*|I&pap zC<11ke>M}b^bgBbph0MxT>#hZ@znH&a((7s`a4N}=)Mrv`J-IA04bE_WiE_6WM}rU z=fagcZ9n{Qk-f3^cy7dSsjh@oy&%ep@Hvz$|GUDM2Z9==luou(Nul)}%zmFo3fu7Y z_<2m*N{_^Phh*&Jv~@txX*S{HH{r)k0sW=tSJ`OeyJ3Wbkkwv^Gu4N;X^k!i{f z>)mW6cgHU0`*sPV)&tK8yzIU=H~qPI`NRaCikgq$`^*%AUto5y)v)Vx}soRR?IUVzA90IY?U_%eoXGDhDJItPb4> zxS+^(LZ6B=Kyd8tD~^p29ptw$@b-sKWFcFs>QBANlUD_*;Bt1`;|I`J(UV8I0HcG31*_t>u007PZ25w>MWa(mP zZu(D!nWlF9MhlYPOYQERu)1E^y&%4OJw+45|*<)m17Uqk81QrN|S$vS@Z~3tDG`{arzOkBv%dbB-CS67^m$6l%_9A1s z)X%z4J5gVYOw(4ZIz%%c?3a_U7pbPPENT;97NP^w^LT**SSSnQa3-G>Vrmb$r+#O2qb)cEr9Jbokvsp`979hf7&0XF))p8Y>+=@9NN3gBGc9pMbUFdHvjsy1W46%xl&JS6{R=P3eO@R)7|`?}b@){b8Ey-y}02mpYu` zLxN|Yg|ZV_Hauu$s*em(yN9wUaQv%5TZt4q>|0l?2>DFCuQ#q@zx1AAFTXgRn^P-l zt+riJ>ChY@d&Vh;z&7i*+8-Iji*0$e-1hyUCShRT96}O)fm)*g`)bQ%iD8rz7FYm? z3znGdYd*@fP()!DT8%LtBP11C!EoQ3_dN?egO}unE;m?$3}+*O1wl6a5;ck9dO5W; zSKPD36_TkSX3zX#oA%*@*&<~WMMlO}^soY6i}CvuwDv3CTuG-7T&pINTYvdw@RCvg zKC{so*UOyuiokhyvtd(r;c2zBf)Lny%x~|^1%$t(PlF0z-NjuuO87N9VB-Lnf^bS^ zN{ORWP4rf+!WtUA5=JEp&3(SzQ3BD7Br)#cl{ihQ3C|LjV|wxvHqjH@+$#61#QQ^B z|M8Grm4x9w z?*l3YLaQz}ZHX*jX2u^#E`x}mI18#9c8-OgCyr?56>m${6?BU21w9L#uwM%JvdodJ zEOyR=o~1<&1vqQ?peEGU<;X*u0hu&F+{JK{vg@ms-=hn&ke^H$s1#Od82L~o(kAy% zbEjrAQH1Bz40dt>1!a!T6l3RZf*sj zrvlt`41^r%lQ05r-61OR{SJU{0@jH$C?C)slvK+k#m7RY(JBtYq)+B=h{<$CZ!0R0 zQ(&SFIc=(>ZDrZ84;Ro^dCildP92JLDh$b35~Ppx)~AeUi4Sz2azhXP`tUf+`^a%2 zbUb`R1h6#|`vi`Qn?wDphNudlvQUP?8d_j1xY318pNub}%O!RK|bUC1#zq zxoH*_w@hjDUg`_cKl-FqCbx9l?Ex#o!BWCem_5wE?Nj7o9t}|Dg!>ag35-L%`%XlA zO8<#iBi%j?UJgn%ibr4ylx+@(PWUWruF__JswePLgdm>_O8-C-;v&ubh{z!k=>kf!HhwZ=dS4&&=HY6;^LkeXH8NRxS?v>0bN2;?t6s}9hKKhi=fiZ1%3o$ zb$!<{2-tM&psGf@)kX|ULE@@3h7d77S51Thf+1HXaTj)YImAhrTp4(pOb86L249#X zn3I?Jg$CE=9{3XHJ7d9HjNzncE3Ka^-bj}9aNys|;CwbGpFQg{JOXx~^AZES#mULYBn zq{?h+zU?DFkI`wRtknmxbmjR)E+JpwhR;x`45{unQF$+*e!DxIwDtDX0sFzHE43+) z_m(M&9dQ6dGfsL#W5&(_tWVe=4x!Ex0+ul=IK64eAQ@~8Vm~`3U1u58eD;Srcwsqd z>h|CPp=M&J`PuY36}BC)(f!CCvGErSS}{V256~r71$QIMF?&I3$fcYHhQ+B+P~S}N zMRkKi`dg@zP;?7&jhfqaxk36HwS@BxTSU%0()8s6p*7_LBEhdt8;i_8BwXzHRzl4t zj$Whuzh>CRET_|$`<4bVytW0kN8vp;8(kdSKs8@KhkB_Q65J3VeJAE4=rR|HVvSBA zcz_AVt`fF^w!W!+QV+(H+oTy)pV zwjE1-S%Y~3=1K)2O%lSBt5YbIL{O0}w-8>);a zPf=?b0Xx_Ff_|o+V8`lGn)Iz*Q=L_k(we7M$azP`FZ5|s7SzOxxQUcCnWyw@b20|{ z3Juiv+=y21jwekIf7my06PE&d^_^4MLtuWT(=&9XLjxT9*Wkw$&}J*Rv5WAVdU3YC zmui8_-tm$fgPX|KWU2T+;|QmJ=R0}zWzv+oTqPwXsO-4)R)yQ^wy;Rma>A zm#u;%eWL;0^0PK{-nE5St_)!x6Rx_XQ@^HaGzQNbB~CHcqIUH1QeVw~a9=D6F2js# zgJh;O4}cmr;C6HZl)t+_sJmhTR=r~at>fdZE){yOQbk_I0$rl`3;#mqKzq@bpGeyJ zayc4!uhGrF=RTxM*5yW*ApfXDmpO2lgDR}L*?xrF@CW>Ng7q(kgoa;>I`a1ifIUzE z0NVczL$WipHFb6{H2#MoxvD6}FEGIP-PAI88)nPV3h``(fCve3oyBDXK;A9WxUL9f ztJHUF?Y`b{NUp$b&4pJxUd=q8%up`hHZy|gZ|<`8gR2wzxO4;8&((bdW(DFp1oxhD z1F4S;up8MU-JsDLaps)Vg(Z}n>Q z%{dUmg#pRfYW2NdgUyZyZPYW}n5oBOy5BF(U52-4z!Op3<*F0YCISv zo90x8p*_H9sz#x9hVEeY25DT$Sid&?2^%sPs2>u27AI;-Cbo!=Qrx^D2K3~zAFl0k zzkFRh@a65eOl)n`O^ABpYI?x*yiE&%j25q}5I#>$gS+UnVw;vanAa?otKY#5YEl3l zPhFNkvH+e$(SRg%q#!OGzX^wH2E5P@KfD`LOT#~=l zC={n&%j+XzXc4r>u)1ki5DJKv_^k$Mbdr~by@b%Er}rmvSc<#J7SrK-;UptYsk@6a zKhz0J&{L5}mkFacWDv@lc%4yg&{`Gxrj4{dXemt4QQBI%$LV9A!?2~IPy*x)%j>5{wQJTK5ew2(cWR+qbWTTu9Aj+wG z%;Z`HKhac3P^B@X#3`MINk9%EsVnR#y3x`niYTT)W|=95pvqXMdGsZMmz%**`$RJe zucstF+XhSq&0^n+pLrPhe#x`8pKS#5lX-(#qtgm$oy81sN?CG>7D~3wgwMSPD;m~J z2yg1-aU!!iS~fSs+b4uzY)L9(nobMO-~*B-PLM9f!CYeMh@^kC%;IcnfCtamSeeBA zHw_=BCUbB2wrAY)n7j#*wLIdi5@oFs(>=Cba4<9KshT1&)Knvie4A|4hD=y_(%d)t zf8G(lQHZ=xU;zMFss3k`_uo*?xg`POMbn#*0`!Z2$Xs)tGFUV!6|XsOPqKelViH-ShT32izOe zSa7{QF13W_#0XS0PSu6oz|Dr&*lIP$N|2TmJBzIoCkvGzx?EM)5v$<3hlbT~<}wZj zXtjINgZ^_}gvPI%@M&j(n8p#D{UVcph?(oAj0fOTzHGhZ#RIRR)@cdVkz_Xbd5MT6 zU>i%MW{d>Ef+nx$XL#=`p3WdY<0gT{Vthu1s%t6&njg1U5E!8QO2_2X==G=vp z?BGr*x_%=NGniYW7>n8OOkqOaj2EMCf1oZdc|Vtr+O86ndhm)N3S`5>vG5QGg*+Qh z&9K50T60AxSOTW6w%8OvZNjvalWIE!vt-BpF(d!FV1bF&d4Sbfn=#XFHJA$G11v!? zg99eHsV>KEz_zDv4v{&42!lW-C>(gv2njts8>5#TNz5Oa{4|CV z2OPV4c|O9ixCuZ%mZ;nLB^vwy6@(wtB_9D8tn704@^Fxsa;5(sv=v7*lr&GUciNQr z>Uu4N_d@G)J;I!P*R40Kl>9QK%d&cwHi4)e8|GJ?zg0J*4W+%vgc*D1*A1-I*tlD>fL`*{b0EzuD0( z5rhEz#g{J2jqMlaLkM_W(Ax)c`OWz#7haGQpC6pMhtliZp|Qew=$pXa7I9RAAcvgR zg0?kbTXaP|^Sl9JuSEjX0gepst?fpKrM!##YowlkpI~;vo*v4cvNc;_H4mu*_!Bp! z_RAogNV7dqPp?wX)?M|&*hOmvIA`sONxDWLS;4xUp_&fU*C52#8<}2#%|EE=NlSEd zTqjee>dogkV)2{MZ+B64A^2G{y8+%Rpk|={F*{b@4BNscTdz$l%M}Te$f2b0=$zZHWPa&D5!3}b{`C|v5+#GM^LOTLr zsflL;#tP^q*aUD89r{@L8*VL|YrthQKmi*93?>xyK4C}-WBvdKic=&zCpkVva=i}o zc?kV-iFRbEKS!hpNQ#_-NJlhifr3L$7%A?X*EJpVxce1FIg0@euf=G>&-ddYewX@Y zYl>w)o~loAV}A|4mX8OUvGv#WU>}78G(}d-Yk+rNk_5PbZ6QY#O6%S=iliGFDScNS z>Id{->J9v^ArXj4KRrm8Qdn*vGIIL~JfP4l?Jur<;DX$Ueci#So*U1MByCg4H}-4JqH73lLj5|v2^C^&vUI^E`y6D>#Bsv}iA(-xr_xfvfe z3`IBzxixu?=umBh3Qx2kC6^bX9Ln?`PNm(*z;jU)Kr|mS*yOCDx*5GS2e=6(GbL)h zC3#EDRcMoO)vER0hY_(NH3K`3kEUKXG^l^dt>#nkBL;z+CFCm2%4;%leq6PFjxEY! zG}t$GAh+Ou3*ONwn@Sdme+tToZ;`0|VTDaVB_#0_>z;QT>d#@G|9f_}zVh2n;fgw@ z)NjQ_fM#q!(y8KEd2U~bV`9603K)8F--x*d2tO1I?+Gq~9Z7dp-n{WEz`2}2{DBSd zV&Yj$w=k**7Sec!aqM#~NMr$$x&|Ld(!>9GT4lJ;li4?=V;`*V^p2~{xZj5q8}a&Y zE#OtvTb$aC5VBHaEH#K0eiSPE@5@mg;_!kx=O^PbQGiNW154?}Wb^`ikIwi*o28A>oY*;)Z}o-B4D_N5du8w~Q~Nr7JZKqlyn=xjgi>Ot_aWP*yDC z%ZQ8F2jF!BZC!6BiXzL6i%hn6(lL@x~F4<&F0-%>bX^#Sb?V|0Cqe=LPMMfu*=3(!!YPI z)0Elc-9qiXBi%df3J%{KgjUejG~5-Och+=5f&*coT4b3t;Nalo4$z3r=R32uv&o7- z&_=TTq85bYzgODg)!OBybB*nrhGhNE^IINMM{~8Bb!w`(QzDimPx0lMPUPm>6c<-f zz3)ww9^(_@P%Jp0Lc8#Df8m%gwPxY-M3w@%q+^MHa);Wjy7MVymPzf8xh<371L3d$bl-l&p{ZFvNY%lpqGN@H5HKekV92x-Ce>a7PX&rttf zcnLPd_XD&F7}j$+~z zc=F{El;({$6GtyLNm1%qR_9D(10xHr2crm~{p=bH_|#OU$|bx01Z{r^d+JcBhZI*i zJkLo5YVD;noQf$Rvp90-N;5syXW+FWrQrf=ZTz$mcHg=gjpJ|=Y@A~MC6ycu+@>)w zM^)Y^Ey-7k`IA9-;C*>*=JkAN_e;z0MafkCE2~Y1|Pa%{sa-ueMDNE^7FL(W%7)3c6S%qb!{;lLaRnPUCK>mIns9jBq<(az|;YCs!hB+ zN7!9(-ujrrml&p1?eqZh_iV>(mjhR#UR@|VrZ`oiaqZ|dJ0qZA9tDBU!SCC?%m(*! z51U;*PaJNu;n9*R53KmC#`D&ncJfLOG01+=dvkcBxKoxKRvrx!a?-HmbW4OoM^V0O zbN@~{W~$Ge_RB7Q?+Utd^DHk;f#fwyT)IrZEhPBJEyM_ZD!9nLSK{B5dByKcARu^( zjxJWQS9}y$onCbJG>3Jwg%&zy z>}a{^-&b`noco~8x70BL*nk(SRfe^)^7f{(39s{|UzLmH;8ZU?LlT58b=3uY5lbp# zq-g6_3}|YOu3qf*NYimdS|{_% z2|yA#y1FCm8MF#<)PPd2PWXhPW5cs|xxmE{SB#F2 zkYGpuH-qv+m;Bq7p8P*BC?=*qu?oh9E~X~`rp^}dM$BFKpiY!2!GR294>(N92t@AKwudhVY`A+48u>?FeMQ=HvqHq^iD>yuxDlL7NP zXb^C+rh@2SajkDzG}3_TQ&q{D@NzpsW@R+71{r@Q4wgZtp%LOwy*4k~JN#4X@|%Km zw9F5x9McD+IzTZcCKy6!Aor8(2#}#3CLtxiDM5A(c6E5==BZxfnleg*GZI@_0+O1R z&)Lxe0+^Tc9=uYfvyhUYaz;at8A3Yo1h%;tlS*99zcAi7m%x|>9Ur{0*ODwvaX0!j z*#em%vDZv)YQ?Z{9vVYtQJ=z+rmdO*I!LMBBtYXoURXojjp(8jS{T>R;0j?4ZsRQl`Vo(dtE2tmNy z%}TMFiz+mPf8aoukN)*;CO9QW%Br?FQ)&wY9kWz*p6JiE&WXc>+~HJ!@iHx_zt~FL z;)orffFuSp@2vKe;}gVCnUP4;C>oCt+-tl4ZLto6ZbW&C4i$0V6hp}o>40-p@9MTA znwLTWGt}=n4UB0C-@CNNk=4{9Sd?o=urcp1SaslnfF53?WT0PIBmJGQmm-6+h;6w} zn9%nM0nx~sckj7_ze4=yba8R$b@lY|^{{j1T0iIO)^bwn74$6+UQI|9C1$)U54u8I z?$Tc~2Qh=#p?`7~)@K7u*BHg+$dsiwYSRRy2Zg;4k6@4FV}ih-?~~W&_L(h_3y`f_ zwsiEF!yJE@nJG;La8oT`Z{Isyv{3{Z6*ZctS}~z_xj#Iz5Yi;f&mF%DjE%7Sl7Abb z8?n4v)E8pz)jVDr|ASD1CDS21&9>-pa=e1BeoyGP6;JO)AbaxWGHosVUkmhlGhVXi zdC)xjUDo5rYvqE*D#oXsKLIy%a{k!5jolRX@J36UK7V{tSGtdDeDHA^oKuh4#;>Ah zEfvCS>-+nD!Mb=6mca3J6LZkjB?iV6?isCG>gSMjiqf?bI&`s(D0RPFkqWI5PhJ9FLG}LbPkN$wrDGLjQcA0Tvy1fqaYwcOaLh)lfNuT15}*K z;CfC$-0-=6@8A=7(}`k`CJw7$Bn*Pv9hqNvrcAYxwd)lDRZd;fmP9t`Zg=yr_9%z> z;w>cWvg{W^aN0D#Si|O|=@9fKp?m&ER#85-^c{+r&SJmQF^wQ$OvGz$*pupB+@eyu zcsqU~1S1d7+FBzr+G?gAI?J5mitH(gZfhNiX;6#v=|j+kC_1qQrs93+_>4A{)A%A{ z%iWw(quKZR^eB6o+xkNfU!Xwc#OxabTm}8vg(@EbEUS~ zDw?~LEaBi7!4&1TU8wpF$ITeIcp)sQvBI?>FzfQvSDYj#HiQcs&qmPHFc@>M=-`O< zF3kE(m!+5RJ-jf;i8Iu1buszp0<`>{yvG*Oe1W@=u>dy`&-U6IWGn1v!fj!OYn)cZ22)@g; z=@bGa*iUx!EdDS>F_$2&yErk(BtFQ^+=&{>2dM{IYB-L*Ia@km*72w`!+1@>z zEgNC(&Zj$bO)WwktgQXe#^?g(H8~$4Dd6^hW)OMSLV%fJ>FKA)%ai@tFGa>Gz~3DR zsTbhjcRKv>Bd?)2@&f(GSt?;?vY<7fz}Gy=O77Ku5)4>rO7f5cTxiUwP{&^8n-m~n z&Gtfy{jdZ*(!IB%$DI&e(TAs{5;YTB8vH*Sma&`Q0zlP$9Tv`MWj3j3&`v~YyZnvY zE&(5M(2>iF^&iFmj%0yV>*PNPJ$hU3RYbet+3l+IXKK)VZAwKA__DT|1$=fFiQL|P zg6hI2Doz|WoM5?yRE9X9G&+&-=n*DnCKejh$Ja1uRYzv2)u+s>sq10EddRAEA-je8 zax@zSc=zc=^)zFhJWQ&jIjc}@qRkc_Pd;V+Z5Hxg(0(2zHtwe8+8dpo)>c1GQwov` z!3l71FcgVl3nuD9_iM6HKhD(2ii8R)ZTNfjF_il7s8m!!VM}uz>3LWDuC*ZPzI+uc zS=@Lp=9c#U4wI-Hg`y(1wkcxPMmtT&)VofPTbtmH0|hf$<(Qf(6jz2CU5vTSUxjgzE2xts7Km2!!t%5W0%DuX#k z0INAG+XV=A3T573v&t1w4LnmtfM4fgmC7J}Om0zvKuNv9nwD2WKLr%alT9))ep!i#C>QagyOtjZG5j z+I)0okBsPI$r?YPZX#=vl(wXamIji|fS)=75MvAm;+sHb^-rBrz_c#n_*sP{&^aK^ zlKo;Fp!BGv3)5wWXA2E^(n-CE?HG6Dcdg-Ttp|lg+Ktg=3|D}@GMsLmr@Xnq5^doL zw|Dba_u?xS{i9tVg`OJ86hTj}a#_--TCQuZgQ7am^YwK)pC{>ZAqw}&oYxYx>yN#? zV^I3-B*u2h)^^7#Hn*@_^n|f8IN0RNq9~-#cnHz15IY;J9h) zp2)RJ*E5XMzk(a}O|8QJ^^h!*bY-}JS;?LY(sUS<{|y|f)h71h;RJ|W!F5%)AyN}l z)w&r(E;h8Dmlwq_;~|}uA<>1}%JLM+^^4SFeq13ptOV|kp;VQYG@vLID$b2@BNFq@ z;SYAb13X2MIuKnWZ?1jNzj6*LRL0Ewe)#lQq|us09Ev#Q#$B|(U1}~0xLZaEYgqUUMs5E;>~XW3vA6h^_crj zr!t1jOj5)^PiaRR^G&z*m0MdtyViET2506~8WR=d$-$6Vkxga9o8 zw#{4e_XaQ5*(dP-e=ouR552(B{@)tOwyq0-*N?gw{wIQv?mr(k@^mq!{mE}LHMISw znN+K7+wZf%_|E9}y_w3D~(^E{4P~)o8_e2LBFL)6(GvFGLbt3nocE9jg9O`pQyex2(yopXWXj~ji8eY_(!ewog^Dl75}8I!|Q;Th1pJu?x-#Wo#$fA z6bwBLpuV>7hi$zWKAkZcj0zD#*7gVW9EyFDR!aRDA*(hyGN>^P9p3}NL*|e^f~@)n z^IZ1Cy?VfM8wy$m>S!@B*+Mw4NK&l|YJu-d$n8Y^19@DegznOW5I{(0-59eL3Ec~) zKBF1Uvu#uVoZ7HNVnyxvGe@QtA)YU)q%TMip_3SZ>Wc#;m@=A@TH@0Z^q10NX*LcQ zMvBeg458VMk{x^ZYol;t!SQs_#Nqg|CVGY4^dn@brS6=IvIRiDPF8|_+Z6Y4j7t?+ zM-N}HWPzUIV?7;0Fm*KOm1*&eb(9OTx{mMA=#QVExs3`C9p^e&aVUmoklS|L�@X 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

    By9c2iZI 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 diff --git a/devtools/client/debugger/test/mochitest/addon4.xpi b/devtools/client/debugger/test/mochitest/addon4.xpi index 56dc98f6e01e766f60b9eeb08c5ce4a3c56d4b02..1f6f106f3c361729bd200633c783b1652101fbcd 100644 GIT binary patch delta 5293 zcmZ`-1yoes_MahTMmnWClpdr(q`ONbl@JAyZZ04xB@9SN2}rktfRuC(Fo;NZBS?eP z8@~6x|M%YafA6lf*SdG_-`V@zbAD%^wf6>PsTiQGhKWT60)cLU`09<6g{)vK*!UpO zQz8)PMysKq|By#TQ<2Zn$;aNo!HU<#)oRAbPRMkNTDWsvQ7|Vt(kH|!ZX~C6ex2zd z^KC^9{^;4@R>l#w9C?*jL_EQqktA&L@=`t#L^`s}@=nRinQ+&kOJ`ulef&$yalkR~ z`1^Ulxo?)I6eu1H%@tQdF*}X~aeft($B_%{$%f(t4GV$DqfJxjF>F~lFrNj82f0Kb z{6X;-_%b2-YcgLM`KfROZTTa-p~IIO*g0YZ5Xb9GESEbFxj;UeTrtpRQkfW;^@Yof z^o+9j=U%}ynU+5{LOd0sz=fpu@MVE{!jd6 zLx9uk2%{?&NVq4sE@fj_H?U4r(bRPD)cc4^l|gO~kYyBt4Bkq=(vgf|Y6XxJy`8;d zY4ax)Gca&8MG^!25yJ`9S5M}IR^kUxP%{C|FdkL*vV+Volir)&9E6|$$b1gpdk>1vJ z4sjmY@8!*f@75jLm2Ptt6^U{f#Jo|?D42RsMz&NY-X6b+;#OA2n*dJ7^os@`*JVC} zDM=ZcG;FG$Mt``)6COQ&kZgohb?CoOqwzg^$(`2hF5Cw0W4pd_hBKh9YqA`C5AxiG zJ2`FUMfzDugopy}0u9}gKA3QZ$22yqu&tXTYqo35>clf*@K%#VDP>LAkeWTo`VR~b zzz*)Y1JAGVd}oUpjOu0IOLSX- zeNsuZd+*t7R4-&Ur>|i?^}*5d8HEg)gCJ%%ijS6D>v<{u?1{@Vww#Q0cFQ2w^750s zF@ExgIlfg5{#1aydX5F_KpYfSTh>hZ!Q+a~i%Rcg|Fu#!T%obb=Npj}Pvk zvu8hbZ(tpCKUYbX@$8IAWZXf8>hl%QBak%1R5kE#7bDquMXT69$BfM)01{8|sEFVwDw1a= zgfOIh-7d+rw`np<(48^SXKy+rNxiAiV9wiX{Yk>Z9dUM?s(9tK!$w?$aGwE+0=2d@3 zguC6K3t(jD@Wf#0`6B#90G$&6n=qPjvR9pYGLw0LSCKgQllB|YvX3OQIJ`5YEKy6` z>(*yzhPmvBLHhT&n5Gv1AJR{IAF6k~l_p7*A(mWRb&pUpP>?_MQvDz=m6wsIz%CBH zH>c^T^79uGc9nhKpGu>DyWXx&t6w_&{lN^~1dtmY`pH`Hdwl}RCIjZQG83r#wKm=% zyzJh60TwBrfu+x_p0yC;CQi^UnFXv`#sL$db#WcULJXYQk0@ zJ8Ow6(>e{6gF3#R?k|SsmKVfk$LtgMqUe^6?`DYAvJ$4QW_3A%kT{#e#`VD;g(f#4dBDDYN{6dZRVneX(?LV0Eq`#K|p4Sd_ggqDSi z*IBl0kwbei>({mI#03YA(?(ac)Qae3W?C&%26=LeC2jAjv(oyDK9>@?{O?zTJ8SA0 z_;|;UNfgpqb~lSv%eSPeQBJ>7hlcMt5d#6R0oV5)%mI4$Uj)pFn_bbTgt78u&+Lb& z2gFU&m|1bK`WgQSTAO*@tPqV7UNbj&&~JlT+e3F88PmTv{=4ri!C=jW-A+mI=?K2x zS&k&C7WR_o%N|qVcE0jia8J$|XWe@GQonk!$h$*`tKg$Hwd<=9s;>I@}@e zWfEwcC0CCsFw8#OI(fj)e;_?YDM)!&c-CSn$@aL57cpz^cNloDF7#X#O%Ol*dpn^9wq3=X6-=^$>E%;E zp(^yCV0bnyVdf|P7aDdu3)6rVl_SO1hHrk9$9`ytMQD|z8_bi%mdOd=q~3i)=q%E$ zO4iem`pn$-FgQ$?#nCH;poscXmr(Zu&s$SC=~C0PY3bF@T|9=1;XB;dSI0cLKw4T= zSkB~U%}0D#_mv-T?=c$vm})N#YIz2_O33wPz~tUG8&3|o9g-~ zi6xS_@Hd4^dN@f&kN<*R0}kYNkl8yVTQCw+{w=GFuOF8fv9=2c1A`8H$Z;#+0w|eg<}+f_Ts9wkJv`hve=Wd9^pFvRnOn_lAEZ20 z%*d%97&$aDI;vr)zCBl>vH$+$s3i@%mPQZl4kXkR{al5Q)3 zQWN&8q?{|X>zyY@Y5Z{pCP0I9cKJ!QRqOSs{{jhWJ%_B@-EpCa9@qq$5_mi=<4@c= z!@M)L%LW$S!OFupvj|gd>MKpH(!m0|Z2h7me92I%l)4x{4 z+CUMr-hxRMUm0p!l=>ODJojXiD2^Xb4YDu9RU+=((!$ti)zfWI1pGsn{cYEG9MvSw z7oDGe&^q{tsKgWx>-rJx6uZg1w5RqQVO5f?R8y1Pz2P1V8QrEmfZ<#GFx=Oe;`x$W z^2~fRYe7pB?qXCUV7DV&%;*{oC6X{$S35uYh7@|fVYM)GQQFr-bCI|;&|^ny|DL^N zWi7H2_s|BzRF9fX4^SoSdqU#y9Y0?Jk<>7$Q$rY42QMtw7wPwCxd)%j@!_YJ*XdZi^AXa+g2QlJZK}!2sp-e3 zA&k5taRp;=qK*q=;b*)ft|c0ZL&T~`eVxSbIKGB<#S!_44WKGhK$=2Y=GokJzu=i( z%B8-G7zL<*NS^4>B9!jy-l%MB*tNzHsPRFW_Mw1h;TWzYTjBgprg?@UbwaCh^^FqZ>bNSD{vNoLDXLcRSKc*I^ z|KzM)JSQg&47}1-7N8G3tTos@JhN24H|@J~Lf+4ICaA_Din;c?W3lZ{CtYm5Fh}q? zBq2$4b*7!@akYiD@DhPnB~$`3K>d_SFGGx_La?M{TLVx;RIA2t>R0=@mFe02hQ$nR zuw9dwg&~lz&0nc0!ZN7`oYZN=SX-Ckub-2&EuRVU%l>R+E0!pg4Nv7h#^&5)p1~&B z_Qq=3^v^B-kYs*VY$2W*RO%Hzb+krlE+E-7+Zn#~`k>UHaU9lozoY$?{1ow9sZWnY zzY?pQ=92=-4eE_YUg{fwnDFHmdb;nl>*2JvDB@=s$E zlv4y8vBe>G2jMM^hC4kG9i30`RN6*3k>uWe{*UjMm{0UYRc8jp^u0*bX&jg~578rH zpUs5SD^U7;AEfP>j+r9F%CiYC%JH#VWfqOeTs8%KkH{UpWvcP$TYFJik&*sm3=F&B z(@1hdpFE-xFFgc^NZx;MeQZe z+S|f1azb6rM~9v}O$GMwy?pLr=(r-Mn2TgGAijhcSKBEN>B&@vxfp^B)RoP~U((g7 z@GQ0C`sqMFsZ-IcyiR3)pq9O|SH1fQ-4wwG>%KwL zD9AQdgw1n&7P~T=M$b-JYDBFZ$yZYSpH`w*>Jt{QxUFN~ z1MJq_9?kyi-&~tkOJ_U-t=Y5~9OX5+tscPewIds`{|P z8B;oVB3$tf_%9vlM=IgcY5LC2b$37J7tD>w7RFI^`YX7xV(AezX(h{?6@g>pw zI{qA*PIT^#n&r6R2n4-}pg*?sm@hDy4*h;3gy=1IgmA*cv046)5=%AW#D7u(4{fK1 zFrz6!3h%=5yYtV|{e~FxqO-f7(H=0-yLp2mf-=LWa2o&ca$`?Mc>Z=p+e6U;LE9~$ zEby3H?lgav|9{7zIRmeNvff~TKQT8gg0A~>!Z(Zt(2V}i7J=1Ed)pf}I@&g&`eSos z$Z+PHv=(L&gBe{N*ujA@kO(Q^hwE#h^ zK9jN&b19MPABR4;d8R}AqZ{)g-fChmLM7`})gnklm+i)FwRi5?Mk=lxW(7oBrs6JL zIJGC!xLNeAxZ%u3Fno;f=ri+A8Pmd-JkI{e1Q0AM9uMwXS}XRpD%*S$uLW?-9~l+~ z@7SkjCwu#4niOhNY;-YRqjyVgK~wXkkVrYV zJo&l$39O4en=4d_`tVQz)U}Ch?%VaduTF&Q6KRNM(}fgSVvb}kWdX-Aof6%OiR=qS z;TejF<>ZxCTZ{*zO6jL_zyB@Y-LS(oE#T}qnql5(Aw|poYaqGWLXql2YTR5rs$=+S zJa>@;L!Wf{zrp7B-37+nd)2jgct?&j2Kv=81xv}&+x;}S)1?5Y+CWJ{6qE-wje5fz zjdFCX50;|E7f7NsNn9;hV{MQ)uVeLH!Djb)pJr%-YxoZP%kN1SXD~=x4U9pC`M=v+ z=n4Mu1fu!;U*?K#cHMZO$NQIy?}cyzJX#D9d^k5AFV0P()rf;vp*2>7@FBdrtp6)V z-#EXCkQa292;K_0EB?Q7^j|<~V$grh*l+;|B|7p=;(%*HXfawz;0_RhKj(6do(l^p zoDRZu>(9gh-$SE*lEMk0_x?bk$H_oxF&4?-=1}fGHE+?HByxB;lmqzB1^fG9zlnVF z1cFs4{(ZszI{JTK^1l<}pW|;lJf-?~5C7^fQn}h{t6~4~hquueW(xZ9xPyz<&-uxYZ&rLT5I@j@Q*p2pnFC06HV1R8$i`g+zveVwDwac`faCvCak zTC{xPHMKq~wIN#}Xr)-!hO0)>F_M$nIG#^bnDllf<7+G5Q!7tI#D+zcw!O-YmEE>v z-PD+M2c4c(Wz_ebU-O-Jq4(^YSC8#xR}tJ&v$=M{TgjVyt=QbZeCe7OdbcQR&S}Sc zL7J>=CYfFrbW0Doei9L=UGU+8$(*+wKW1JImoSwVn(|1V=i2{NslbCzehWO6dE+&s zX^H&T-NqGy$67zE@0IzP-Xv{t{G0I9gZzk?0tLHD@x7-nx`6??0Ejt&;a-wjTmp=x zT;xEX+|R#I7Zy>Ew^|9pG;l&S7-7+&Jh@c3#)u1;CKwpBnr66s({GqA3uJ>ZKTuzC zMp1rls$OnlUS=B5POyCm^^w7o4@wD7W)oJ{1X&2u_^vbDdlOI-BQVb4F03fcLDi8V zutN)`gqJ~4&k5oI06d{fSpWb4 diff --git a/devtools/client/debugger/test/mochitest/addon5.xpi b/devtools/client/debugger/test/mochitest/addon5.xpi index 16991f7a06aeaf2bb32a045d7c925f1d41372d9e..56b38761d211ae7ee09f1773a207e8ba83b60d30 100644 GIT binary patch delta 5303 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 Ae*gdg diff --git a/testing/profiles/prefs_general.js b/testing/profiles/prefs_general.js index 6275a4ae84e0..4e04bb85bb2c 100644 --- a/testing/profiles/prefs_general.js +++ b/testing/profiles/prefs_general.js @@ -70,7 +70,6 @@ user_pref("extensions.getAddons.cache.enabled", false); user_pref("extensions.installDistroAddons", false); // XPI extensions are required for test harnesses to load user_pref("extensions.defaultProviders.enabled", true); -// Disable signature requirements where possible user_pref("xpinstall.signatures.required", false); user_pref("geo.wifi.uri", "http://%(server)s/tests/dom/tests/mochitest/geolocation/network_geolocation.sjs"); diff --git a/toolkit/mozapps/extensions/test/mochitest/file_bug687194.xpi b/toolkit/mozapps/extensions/test/mochitest/file_bug687194.xpi index dfc03505336706dd9f6de4ec0dc43138d172e4e2..e215cffad8adaffef673b509f414a48e93e1ee4b 100644 GIT binary patch delta 4273 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 Date: Fri, 26 Feb 2016 12:35:34 -0800 Subject: [PATCH 59/60] Bug 1249595 - Enable 11 more ESLint rules for PSM. r=keeler MozReview-Commit-ID: FxS9SPRMMxf --HG-- extra : transplant_source : %18%08%F0%EB%E3%AD%3E%F7%94%80%05%C0%D0P%5Co.%940%7E --- security/manager/.eslintrc | 41 ++++++++++++ .../pki/resources/content/clientauthask.js | 2 +- .../pki/resources/content/deletecert.js | 62 ++++++++--------- .../pki/resources/content/device_manager.js | 2 +- .../pki/resources/content/exceptionDialog.js | 2 +- .../manager/pki/resources/content/password.js | 2 +- .../manager/pki/resources/content/pippki.js | 3 +- .../pki/resources/content/resetpassword.js | 3 +- .../pki/resources/content/viewCertDetails.js | 10 +-- .../mixedcontent/mixedContentTest.js | 16 ++--- .../test_dynDelayedUnsecureXHR.html | 10 +-- .../test_stricttransportsecurity.html | 2 +- security/manager/ssl/tests/unit/head_psm.js | 66 +++++++++---------- .../ssl/tests/unit/test_cert_overrides.js | 18 ++--- .../unit/test_constructX509FromBase64.js | 4 +- .../manager/ssl/tests/unit/test_getchain.js | 2 +- .../ssl/tests/unit/test_pinning_dynamic.js | 2 +- .../tests/unit/test_pinning_header_parsing.js | 2 +- .../ssl/tests/unit/test_signed_apps.js | 2 +- .../manager/ssl/tests/unit/test_signed_dir.js | 6 +- security/manager/tools/genHPKPStaticPins.js | 2 +- security/manager/tools/getHSTSPreloadList.js | 25 ++++--- 22 files changed, 156 insertions(+), 128 deletions(-) diff --git a/security/manager/.eslintrc b/security/manager/.eslintrc index b0d763ed34ce..dcd27c27167b 100644 --- a/security/manager/.eslintrc +++ b/security/manager/.eslintrc @@ -6,12 +6,18 @@ // Require spacing around => "arrow-spacing": 2, + // Always require spacing around a single line block + "block-spacing": 2, + // No space before always a space after a comma "comma-spacing": [2, {"before": false, "after": true}], // Commas at the end of the line not the start "comma-style": 2, + // Don't require spaces around computed properties + "computed-property-spacing": [2, "never"], + // Functions must always return something or nothing "consistent-return": 2, @@ -33,6 +39,12 @@ // Always require parenthesis for new calls "new-parens": 2, + // Use [] instead of Array() + "no-array-constructor": 2, + + // Disallow use of debugger + "no-debugger": 2, + // No duplicate arguments in function declarations "no-dupe-args": 2, @@ -45,6 +57,9 @@ // No labels "no-labels": 2, + // If an if block ends with a return no need for an else block + "no-else-return": 2, + // No empty character classes in regex "no-empty-character-class": 2, @@ -69,21 +84,41 @@ // No odd whitespace characters "no-irregular-whitespace": 2, + // No single if block inside an else block + "no-lonely-if": 2, + // No mixing spaces and tabs in indent "no-mixed-spaces-and-tabs": [2, "smart-tabs"], + // No unnecessary spacing + "no-multi-spaces": [2, { "exceptions": { + "AssignmentExpression": true, + "VariableDeclarator": true, + "ArrayExpression": true, + "ObjectExpression": true + }}], + // No reassigning native JS objects "no-native-reassign": 2, // No (!foo in bar) "no-negated-in-lhs": 2, + // Nested ternary statements are confusing + "no-nested-ternary": 2, + // Use {} instead of new Object() "no-new-object": 2, // No Math() or JSON() "no-obj-calls": 2, + // No octal literals + "no-octal": 2, + + // No redeclaring variables + "no-redeclare": 2, + // No unnecessary comparisons "no-self-compare": 2, @@ -111,10 +146,15 @@ // Always require semicolon at end of statement "semi": [2, "always"], + // Require space after keywords + // Note: Replaced by keyword-spacing in ESLint v2.0. + "space-after-keywords": 2, + // Require space before blocks "space-before-blocks": 2, // Require spaces before finally, catch, etc. + // Note: Replaced by keyword-spacing in ESLint v2.0. "space-before-keywords": [2, "always"], // No space padding in parentheses @@ -124,6 +164,7 @@ "space-infix-ops": 2, // Require spaces after return, throw and case + // Note: Replaced by keyword-spacing in ESLint v2.0. "space-return-throw-case": 2, // ++ and -- should not need spacing diff --git a/security/manager/pki/resources/content/clientauthask.js b/security/manager/pki/resources/content/clientauthask.js index e305bed45b5c..fe1405f25cf6 100644 --- a/security/manager/pki/resources/content/clientauthask.js +++ b/security/manager/pki/resources/content/clientauthask.js @@ -28,7 +28,7 @@ function onLoad() var rememberSetting = true; var pref = Components.classes['@mozilla.org/preferences-service;1'] - .getService(Components.interfaces.nsIPrefService); + .getService(Components.interfaces.nsIPrefService); if (pref) { pref = pref.getBranch(null); try { diff --git a/security/manager/pki/resources/content/deletecert.js b/security/manager/pki/resources/content/deletecert.js index e99fde394158..12aac00c7af0 100644 --- a/security/manager/pki/resources/content/deletecert.js +++ b/security/manager/pki/resources/content/deletecert.js @@ -22,40 +22,36 @@ function setWindowName() var confirm; var impact; - if(typeFlag == "mine_tab") - { - title = bundle.getString("deleteUserCertTitle"); - confirm = bundle.getString("deleteUserCertConfirm"); - impact = bundle.getString("deleteUserCertImpact"); - } - else if(typeFlag == "websites_tab") - { - title = bundle.getString("deleteSslCertTitle3"); - confirm = bundle.getString("deleteSslCertConfirm3"); - impact = bundle.getString("deleteSslCertImpact3"); - } - else if(typeFlag == "ca_tab") - { - title = bundle.getString("deleteCaCertTitle2"); - confirm = bundle.getString("deleteCaCertConfirm2"); - impact = bundle.getString("deleteCaCertImpactX2"); - } - else if(typeFlag == "others_tab") - { - title = bundle.getString("deleteEmailCertTitle"); - confirm = bundle.getString("deleteEmailCertConfirm"); - impact = bundle.getString("deleteEmailCertImpactDesc"); - } - else if(typeFlag == "orphan_tab") - { - title = bundle.getString("deleteOrphanCertTitle"); - confirm = bundle.getString("deleteOrphanCertConfirm"); - impact = ""; - } - else - { - return; + switch (typeFlag) { + case "mine_tab": + title = bundle.getString("deleteUserCertTitle"); + confirm = bundle.getString("deleteUserCertConfirm"); + impact = bundle.getString("deleteUserCertImpact"); + break; + case "websites_tab": + title = bundle.getString("deleteSslCertTitle3"); + confirm = bundle.getString("deleteSslCertConfirm3"); + impact = bundle.getString("deleteSslCertImpact3"); + break; + case "ca_tab": + title = bundle.getString("deleteCaCertTitle2"); + confirm = bundle.getString("deleteCaCertConfirm2"); + impact = bundle.getString("deleteCaCertImpactX2"); + break; + case "others_tab": + title = bundle.getString("deleteEmailCertTitle"); + confirm = bundle.getString("deleteEmailCertConfirm"); + impact = bundle.getString("deleteEmailCertImpactDesc"); + break; + case "orphan_tab": + title = bundle.getString("deleteOrphanCertTitle"); + confirm = bundle.getString("deleteOrphanCertConfirm"); + impact = ""; + break; + default: + return; } + var confirReference = document.getElementById('confirm'); var impactReference = document.getElementById('impact'); document.title = title; diff --git a/security/manager/pki/resources/content/device_manager.js b/security/manager/pki/resources/content/device_manager.js index ff3ceaf961e6..c89b70d0a895 100644 --- a/security/manager/pki/resources/content/device_manager.js +++ b/security/manager/pki/resources/content/device_manager.js @@ -190,7 +190,7 @@ function enableButtons() if (selected_token != null) { if (selected_token.needsLogin() || !(selected_token.needsUserInit)) { pw_toggle = "false"; - if(selected_token.needsLogin()) { + if (selected_token.needsLogin()) { if (selected_token.isLoggedIn()) { logout_toggle = "false"; } else { diff --git a/security/manager/pki/resources/content/exceptionDialog.js b/security/manager/pki/resources/content/exceptionDialog.js index df647c1e3cf7..019e7a383ad4 100644 --- a/security/manager/pki/resources/content/exceptionDialog.js +++ b/security/manager/pki/resources/content/exceptionDialog.js @@ -104,7 +104,7 @@ function checkCert() { var req = new XMLHttpRequest(); try { - if(uri) { + if (uri) { req.open('GET', uri.prePath, false); req.channel.notificationCallbacks = new badCertListener(); req.send(null); diff --git a/security/manager/pki/resources/content/password.js b/security/manager/pki/resources/content/password.js index d7e350cfaec8..013595499532 100644 --- a/security/manager/pki/resources/content/password.js +++ b/security/manager/pki/resources/content/password.js @@ -28,7 +28,7 @@ function onLoad() try { params = window.arguments[0].QueryInterface(nsIDialogParamBlock); tokenName = params.GetString(1); - } catch(exception) { + } catch (e) { // this should not happen. // previously we had self.name, but self.name was a bad idea // as window name must be a subset of ascii, and the code was diff --git a/security/manager/pki/resources/content/pippki.js b/security/manager/pki/resources/content/pippki.js index 10e3c8708c7e..74cf5a3d59c0 100644 --- a/security/manager/pki/resources/content/pippki.js +++ b/security/manager/pki/resources/content/pippki.js @@ -141,8 +141,7 @@ function exportToFile(parent, cert) fos.init(file, 0x02 | 0x08 | 0x20, 0o0644, 0); written = fos.write(content, content.length); fos.close(); - } - catch(e) { + } catch (e) { switch (e.result) { case Components.results.NS_ERROR_FILE_ACCESS_DENIED: msg = bundle.getString("writeFileAccessDenied"); diff --git a/security/manager/pki/resources/content/resetpassword.js b/security/manager/pki/resources/content/resetpassword.js index f3840d4d79e2..244e97b2dab1 100644 --- a/security/manager/pki/resources/content/resetpassword.js +++ b/security/manager/pki/resources/content/resetpassword.js @@ -43,8 +43,7 @@ function resetPassword() wallet.WALLET_DeleteAll(); } } - } - catch(e) { + } catch (e) { // wallet.crypto pref is missing } } diff --git a/security/manager/pki/resources/content/viewCertDetails.js b/security/manager/pki/resources/content/viewCertDetails.js index 36b95772af39..c1c69749e2ca 100644 --- a/security/manager/pki/resources/content/viewCertDetails.js +++ b/security/manager/pki/resources/content/viewCertDetails.js @@ -77,18 +77,10 @@ function setWindowName() var certDetails = bundle.getString('certDetails'); if (myName != "") { document.title = certDetails + '"' + myName + '"'; // XXX l10n? - // Get the token - // XXX ignore this for now. NSS will find the cert on a token - // by "tokenname:certname", which is what we have. - //var tokenName = ""; - //var pk11db = Components.classes[nsPK11TokenDB].getService(nsIPK11TokenDB); - //var token = pk11db.findTokenByName(tokenName); - - //var cert = certdb.findCertByNickname(token, myName); cert = certdb.findCertByNickname(myName); } else { var params = window.arguments[0].QueryInterface(nsIDialogParamBlock); - var cert = params.objects.queryElementAt(0, nsIX509Cert); + cert = params.objects.queryElementAt(0, nsIX509Cert); document.title = certDetails + '"' + cert.windowTitle + '"'; // XXX l10n? } diff --git a/security/manager/ssl/tests/mochitest/mixedcontent/mixedContentTest.js b/security/manager/ssl/tests/mochitest/mixedcontent/mixedContentTest.js index 5a83402da331..4719c979f112 100644 --- a/security/manager/ssl/tests/mochitest/mixedcontent/mixedContentTest.js +++ b/security/manager/ssl/tests/mochitest/mixedcontent/mixedContentTest.js @@ -103,17 +103,13 @@ function postMsg(message) function finish() { - if (history.length == 1 && !bypassNavigationTest) - { - window.setTimeout(function() - { + if (history.length == 1 && !bypassNavigationTest) { + window.setTimeout(() => { window.location.assign(navigateToInsecure ? "http://example.com/tests/security/manager/ssl/tests/mochitest/mixedcontent/backward.html" : "https://example.com/tests/security/manager/ssl/tests/mochitest/mixedcontent/backward.html"); }, 0); - } - else - { + } else { postMsg("done"); window.close(); } @@ -193,7 +189,11 @@ function waitForSecurityState(expectedState, callback) var roundsLeft = 200; // Wait for 20 seconds (=200*100ms) var interval = window.setInterval(function() { - isSecurityState(expectedState, "", function(isok) {if (isok) {roundsLeft = 0;}}); + isSecurityState(expectedState, "", isok => { + if (isok) { + roundsLeft = 0; + } + }); if (!roundsLeft--) { window.clearInterval(interval); callback(); diff --git a/security/manager/ssl/tests/mochitest/mixedcontent/test_dynDelayedUnsecureXHR.html b/security/manager/ssl/tests/mochitest/mixedcontent/test_dynDelayedUnsecureXHR.html index d566a35947f7..24ecfbda1bec 100644 --- a/security/manager/ssl/tests/mochitest/mixedcontent/test_dynDelayedUnsecureXHR.html +++ b/security/manager/ssl/tests/mochitest/mixedcontent/test_dynDelayedUnsecureXHR.html @@ -17,19 +17,15 @@ function runTest() { isSecurityState("secure"); - window.setTimeout(function() - { - try - { + window.setTimeout(() => { + try { var req = new XMLHttpRequest(); req.open("GET", "http://example.com/tests/security/manager/ssl/tests/mochitest/mixedcontent/alloworigin.sjs", false); req.send(null); // Change should be immediate, the request was sent synchronously isSecurityState("broken", "security broken after insecure XHR"); - } - catch (ex) - { + } catch (ex) { ok(false, ex); } diff --git a/security/manager/ssl/tests/mochitest/stricttransportsecurity/test_stricttransportsecurity.html b/security/manager/ssl/tests/mochitest/stricttransportsecurity/test_stricttransportsecurity.html index 872811ea8627..59b96a1258be 100644 --- a/security/manager/ssl/tests/mochitest/stricttransportsecurity/test_stricttransportsecurity.html +++ b/security/manager/ssl/tests/mochitest/stricttransportsecurity/test_stricttransportsecurity.html @@ -109,7 +109,7 @@ // listen for calls back from the sts-setting iframe and then // the verification frames. window.addEventListener("message", onMessageReceived, false); - window.addEventListener('load', function() {startRound('plain');}, false); + window.addEventListener("load", () => { startRound("plain"); }, false); diff --git a/security/manager/ssl/tests/unit/head_psm.js b/security/manager/ssl/tests/unit/head_psm.js index 1b1f24f5e609..ca174192a6a0 100644 --- a/security/manager/ssl/tests/unit/head_psm.js +++ b/security/manager/ssl/tests/unit/head_psm.js @@ -33,49 +33,49 @@ const MOZILLA_PKIX_ERROR_BASE = Ci.nsINSSErrorsService.MOZILLA_PKIX_ERROR_BASE; const PRErrorCodeSuccess = 0; // Sort in numerical order -const SEC_ERROR_INVALID_TIME = SEC_ERROR_BASE + 8; -const SEC_ERROR_BAD_DER = SEC_ERROR_BASE + 9; -const SEC_ERROR_BAD_SIGNATURE = SEC_ERROR_BASE + 10; -const SEC_ERROR_EXPIRED_CERTIFICATE = SEC_ERROR_BASE + 11; -const SEC_ERROR_REVOKED_CERTIFICATE = SEC_ERROR_BASE + 12; // -8180 -const SEC_ERROR_UNKNOWN_ISSUER = SEC_ERROR_BASE + 13; -const SEC_ERROR_UNTRUSTED_ISSUER = SEC_ERROR_BASE + 20; // -8172 -const SEC_ERROR_UNTRUSTED_CERT = SEC_ERROR_BASE + 21; // -8171 -const SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE = SEC_ERROR_BASE + 30; // -8162 -const SEC_ERROR_CA_CERT_INVALID = SEC_ERROR_BASE + 36; -const SEC_ERROR_UNKNOWN_CRITICAL_EXTENSION = SEC_ERROR_BASE + 41; -const SEC_ERROR_INADEQUATE_KEY_USAGE = SEC_ERROR_BASE + 90; // -8102 -const SEC_ERROR_INADEQUATE_CERT_TYPE = SEC_ERROR_BASE + 91; // -8101 -const SEC_ERROR_CERT_NOT_IN_NAME_SPACE = SEC_ERROR_BASE + 112; // -8080 -const SEC_ERROR_CERT_BAD_ACCESS_LOCATION = SEC_ERROR_BASE + 117; // -8075 +const SEC_ERROR_INVALID_TIME = SEC_ERROR_BASE + 8; +const SEC_ERROR_BAD_DER = SEC_ERROR_BASE + 9; +const SEC_ERROR_BAD_SIGNATURE = SEC_ERROR_BASE + 10; +const SEC_ERROR_EXPIRED_CERTIFICATE = SEC_ERROR_BASE + 11; +const SEC_ERROR_REVOKED_CERTIFICATE = SEC_ERROR_BASE + 12; +const SEC_ERROR_UNKNOWN_ISSUER = SEC_ERROR_BASE + 13; +const SEC_ERROR_UNTRUSTED_ISSUER = SEC_ERROR_BASE + 20; +const SEC_ERROR_UNTRUSTED_CERT = SEC_ERROR_BASE + 21; +const SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE = SEC_ERROR_BASE + 30; +const SEC_ERROR_CA_CERT_INVALID = SEC_ERROR_BASE + 36; +const SEC_ERROR_UNKNOWN_CRITICAL_EXTENSION = SEC_ERROR_BASE + 41; +const SEC_ERROR_INADEQUATE_KEY_USAGE = SEC_ERROR_BASE + 90; +const SEC_ERROR_INADEQUATE_CERT_TYPE = SEC_ERROR_BASE + 91; +const SEC_ERROR_CERT_NOT_IN_NAME_SPACE = SEC_ERROR_BASE + 112; +const SEC_ERROR_CERT_BAD_ACCESS_LOCATION = SEC_ERROR_BASE + 117; const SEC_ERROR_OCSP_MALFORMED_REQUEST = SEC_ERROR_BASE + 120; -const SEC_ERROR_OCSP_SERVER_ERROR = SEC_ERROR_BASE + 121; // -8071 +const SEC_ERROR_OCSP_SERVER_ERROR = SEC_ERROR_BASE + 121; const SEC_ERROR_OCSP_TRY_SERVER_LATER = SEC_ERROR_BASE + 122; const SEC_ERROR_OCSP_REQUEST_NEEDS_SIG = SEC_ERROR_BASE + 123; const SEC_ERROR_OCSP_UNAUTHORIZED_REQUEST = SEC_ERROR_BASE + 124; -const SEC_ERROR_OCSP_UNKNOWN_CERT = SEC_ERROR_BASE + 126; // -8066 +const SEC_ERROR_OCSP_UNKNOWN_CERT = SEC_ERROR_BASE + 126; const SEC_ERROR_OCSP_MALFORMED_RESPONSE = SEC_ERROR_BASE + 129; const SEC_ERROR_OCSP_UNAUTHORIZED_RESPONSE = SEC_ERROR_BASE + 130; const SEC_ERROR_OCSP_OLD_RESPONSE = SEC_ERROR_BASE + 132; -const SEC_ERROR_UNSUPPORTED_ELLIPTIC_CURVE = SEC_ERROR_BASE + 141; // -8051 +const SEC_ERROR_UNSUPPORTED_ELLIPTIC_CURVE = SEC_ERROR_BASE + 141; const SEC_ERROR_OCSP_INVALID_SIGNING_CERT = SEC_ERROR_BASE + 144; -const SEC_ERROR_POLICY_VALIDATION_FAILED = SEC_ERROR_BASE + 160; // -8032 +const SEC_ERROR_POLICY_VALIDATION_FAILED = SEC_ERROR_BASE + 160; const SEC_ERROR_OCSP_BAD_SIGNATURE = SEC_ERROR_BASE + 157; const SEC_ERROR_CERT_SIGNATURE_ALGORITHM_DISABLED = SEC_ERROR_BASE + 176; -const SSL_ERROR_NO_CYPHER_OVERLAP = SSL_ERROR_BASE + 2; -const SSL_ERROR_BAD_CERT_DOMAIN = SSL_ERROR_BASE + 12; -const SSL_ERROR_BAD_CERT_ALERT = SSL_ERROR_BASE + 17; +const SSL_ERROR_NO_CYPHER_OVERLAP = SSL_ERROR_BASE + 2; +const SSL_ERROR_BAD_CERT_DOMAIN = SSL_ERROR_BASE + 12; +const SSL_ERROR_BAD_CERT_ALERT = SSL_ERROR_BASE + 17; const SSL_ERROR_WEAK_SERVER_CERT_KEY = SSL_ERROR_BASE + 132; -const MOZILLA_PKIX_ERROR_KEY_PINNING_FAILURE = MOZILLA_PKIX_ERROR_BASE + 0; -const MOZILLA_PKIX_ERROR_CA_CERT_USED_AS_END_ENTITY = MOZILLA_PKIX_ERROR_BASE + 1; -const MOZILLA_PKIX_ERROR_INADEQUATE_KEY_SIZE = MOZILLA_PKIX_ERROR_BASE + 2; // -16382 -const MOZILLA_PKIX_ERROR_V1_CERT_USED_AS_CA = MOZILLA_PKIX_ERROR_BASE + 3; -const MOZILLA_PKIX_ERROR_NOT_YET_VALID_CERTIFICATE = MOZILLA_PKIX_ERROR_BASE + 5; +const MOZILLA_PKIX_ERROR_KEY_PINNING_FAILURE = MOZILLA_PKIX_ERROR_BASE + 0; +const MOZILLA_PKIX_ERROR_CA_CERT_USED_AS_END_ENTITY = MOZILLA_PKIX_ERROR_BASE + 1; +const MOZILLA_PKIX_ERROR_INADEQUATE_KEY_SIZE = MOZILLA_PKIX_ERROR_BASE + 2; +const MOZILLA_PKIX_ERROR_V1_CERT_USED_AS_CA = MOZILLA_PKIX_ERROR_BASE + 3; +const MOZILLA_PKIX_ERROR_NOT_YET_VALID_CERTIFICATE = MOZILLA_PKIX_ERROR_BASE + 5; const MOZILLA_PKIX_ERROR_NOT_YET_VALID_ISSUER_CERTIFICATE = MOZILLA_PKIX_ERROR_BASE + 6; -const MOZILLA_PKIX_ERROR_OCSP_RESPONSE_FOR_CERT_MISSING = MOZILLA_PKIX_ERROR_BASE + 8; -const MOZILLA_PKIX_ERROR_REQUIRED_TLS_FEATURE_MISSING = MOZILLA_PKIX_ERROR_BASE + 10; +const MOZILLA_PKIX_ERROR_OCSP_RESPONSE_FOR_CERT_MISSING = MOZILLA_PKIX_ERROR_BASE + 8; +const MOZILLA_PKIX_ERROR_REQUIRED_TLS_FEATURE_MISSING = MOZILLA_PKIX_ERROR_BASE + 10; // Supported Certificate Usages const certificateUsageSSLClient = 0x0001; @@ -196,7 +196,7 @@ function _getLibraryFunctionWithNoArguments(functionName, libraryName) { let nsslib; try { nsslib = ctypes.open(path); - } catch(e) { + } catch (e) { // In case opening the library without a full path fails, // try again with a full path. let file = Services.dirsvc.get("GreBinD", Ci.nsILocalFile); @@ -482,12 +482,12 @@ function _setupTLSServerTest(serverBinName, certsPath) // [ [typeOfResponse, certnick, extracertnick]...] function generateOCSPResponses(ocspRespArray, nssDBlocation) { - let utilBinName = "GenerateOCSPResponse"; + let utilBinName = "GenerateOCSPResponse"; let ocspGenBin = _getBinaryUtil(utilBinName); - let retArray = new Array(); + let retArray = []; for (let i = 0; i < ocspRespArray.length; i++) { - let argArray = new Array(); + let argArray = []; let ocspFilepre = do_get_file(i.toString() + ".ocsp", true); let filename = ocspFilepre.path; // Using "sql:" causes the SQL DB to be used so we can run tests on Android. diff --git a/security/manager/ssl/tests/unit/test_cert_overrides.js b/security/manager/ssl/tests/unit/test_cert_overrides.js index 23bd4463002c..7aabd77ee2b1 100644 --- a/security/manager/ssl/tests/unit/test_cert_overrides.js +++ b/security/manager/ssl/tests/unit/test_cert_overrides.js @@ -18,22 +18,22 @@ function check_telemetry() { .getService(Ci.nsITelemetry) .getHistogramById("SSL_CERT_ERROR_OVERRIDES") .snapshot(); - equal(histogram.counts[ 0], 0, "Should have 0 unclassified counts"); - equal(histogram.counts[ 2], 8, + equal(histogram.counts[0], 0, "Should have 0 unclassified counts"); + equal(histogram.counts[2], 8, "Actual and expected SEC_ERROR_UNKNOWN_ISSUER counts should match"); - equal(histogram.counts[ 3], 1, + equal(histogram.counts[3], 1, "Actual and expected SEC_ERROR_CA_CERT_INVALID counts should match"); - equal(histogram.counts[ 4], 0, + equal(histogram.counts[4], 0, "Actual and expected SEC_ERROR_UNTRUSTED_ISSUER counts should match"); - equal(histogram.counts[ 5], 1, + equal(histogram.counts[5], 1, "Actual and expected SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE counts should match"); - equal(histogram.counts[ 6], 0, + equal(histogram.counts[6], 0, "Actual and expected SEC_ERROR_UNTRUSTED_CERT counts should match"); - equal(histogram.counts[ 7], 0, + equal(histogram.counts[7], 0, "Actual and expected SEC_ERROR_INADEQUATE_KEY_USAGE counts should match"); - equal(histogram.counts[ 8], 2, + equal(histogram.counts[8], 2, "Actual and expected SEC_ERROR_CERT_SIGNATURE_ALGORITHM_DISABLED counts should match"); - equal(histogram.counts[ 9], 10, + equal(histogram.counts[9], 10, "Actual and expected SSL_ERROR_BAD_CERT_DOMAIN counts should match"); equal(histogram.counts[10], 5, "Actual and expected SEC_ERROR_EXPIRED_CERTIFICATE counts should match"); diff --git a/security/manager/ssl/tests/unit/test_constructX509FromBase64.js b/security/manager/ssl/tests/unit/test_constructX509FromBase64.js index 03088b12accf..d44e249c2767 100644 --- a/security/manager/ssl/tests/unit/test_constructX509FromBase64.js +++ b/security/manager/ssl/tests/unit/test_constructX509FromBase64.js @@ -18,9 +18,9 @@ function excMessage(e) { msg = msg + ": " + e.data; } return msg; - } else { - return e.toString(); } + + return e.toString(); } function testGood(data) { diff --git a/security/manager/ssl/tests/unit/test_getchain.js b/security/manager/ssl/tests/unit/test_getchain.js index d8a901fd97d5..2851c3a705a1 100644 --- a/security/manager/ssl/tests/unit/test_getchain.js +++ b/security/manager/ssl/tests/unit/test_getchain.js @@ -19,7 +19,7 @@ var certList = [ // I have to grab them by enumerating all the certs and then finding // the ones that I am interested in. function get_ca_array() { - let ret_array = new Array(); + let ret_array = []; let allCerts = certdb.getCerts(); let enumerator = allCerts.getEnumerator(); while (enumerator.hasMoreElements()) { diff --git a/security/manager/ssl/tests/unit/test_pinning_dynamic.js b/security/manager/ssl/tests/unit/test_pinning_dynamic.js index 4b8e819265b3..6cab7414146e 100644 --- a/security/manager/ssl/tests/unit/test_pinning_dynamic.js +++ b/security/manager/ssl/tests/unit/test_pinning_dynamic.js @@ -20,7 +20,7 @@ function certFromFile(cert_name) { function loadCert(cert_name, trust_string) { let cert_filename = "test_pinning_dynamic/" + cert_name + ".pem"; - addCertFromFile(certdb, cert_filename, trust_string); + addCertFromFile(certdb, cert_filename, trust_string); return constructCertFromFile(cert_filename); } diff --git a/security/manager/ssl/tests/unit/test_pinning_header_parsing.js b/security/manager/ssl/tests/unit/test_pinning_header_parsing.js index f089441bd78d..290c8090e633 100644 --- a/security/manager/ssl/tests/unit/test_pinning_header_parsing.js +++ b/security/manager/ssl/tests/unit/test_pinning_header_parsing.js @@ -17,7 +17,7 @@ function certFromFile(cert_name) { function loadCert(cert_name, trust_string) { let cert_filename = "test_pinning_dynamic/" + cert_name + ".pem"; - addCertFromFile(certdb, cert_filename, trust_string); + addCertFromFile(certdb, cert_filename, trust_string); return constructCertFromFile(cert_filename); } diff --git a/security/manager/ssl/tests/unit/test_signed_apps.js b/security/manager/ssl/tests/unit/test_signed_apps.js index 88e1bfd5d810..caaa0b3146a5 100644 --- a/security/manager/ssl/tests/unit/test_signed_apps.js +++ b/security/manager/ssl/tests/unit/test_signed_apps.js @@ -72,7 +72,7 @@ function tamper(inFilePath, outFilePath, modifications, newEntries) { // Any leftover modification means that we were expecting to modify an entry // in the input file that wasn't there. - for(var name in modifications) { + for (let name in modifications) { if (modifications.hasOwnProperty(name)) { throw "input file was missing expected entries: " + name; } diff --git a/security/manager/ssl/tests/unit/test_signed_dir.js b/security/manager/ssl/tests/unit/test_signed_dir.js index e1e0a79c7d8d..e0f7ae568822 100644 --- a/security/manager/ssl/tests/unit/test_signed_dir.js +++ b/security/manager/ssl/tests/unit/test_signed_dir.js @@ -23,7 +23,7 @@ function prepare(tamper) { if (tamper.copy) { tamper.copy.forEach(i => { let f = gTarget.clone(); - i[0].split('/').forEach(seg => {f.append(seg);}); + i[0].split("/").forEach(seg => { f.append(seg); }); f.copyTo(null, i[1]); }); } @@ -32,7 +32,7 @@ function prepare(tamper) { if (tamper.delete) { tamper.delete.forEach(i => { let f = gTarget.clone(); - i.split('/').forEach(seg => {f.append(seg);}); + i.split("/").forEach(seg => { f.append(seg); }); f.remove(true); }); } @@ -41,7 +41,7 @@ function prepare(tamper) { if (tamper.corrupt) { tamper.corrupt.forEach(i => { let f = gTarget.clone(); - i.split('/').forEach(seg => {f.append(seg);}); + i.split("/").forEach(seg => { f.append(seg); }); let s = FileUtils.openFileOutputStream(f, FileUtils.MODE_WRONLY); const str = "Kilroy was here"; s.write(str, str.length); diff --git a/security/manager/tools/genHPKPStaticPins.js b/security/manager/tools/genHPKPStaticPins.js index 67905cc72e7c..fc0b89c41abd 100644 --- a/security/manager/tools/genHPKPStaticPins.js +++ b/security/manager/tools/genHPKPStaticPins.js @@ -238,7 +238,7 @@ function downloadAndParseChromeCerts(filename, certNameToSKD, certSKDToName) { if (line.length == 0 || line[0] == '#') { continue; } - switch(state) { + switch (state) { case PRE_NAME: chromeName = line; state = POST_NAME; diff --git a/security/manager/tools/getHSTSPreloadList.js b/security/manager/tools/getHSTSPreloadList.js index 34595e7b6ff8..07ffae8e0fd4 100644 --- a/security/manager/tools/getHSTSPreloadList.js +++ b/security/manager/tools/getHSTSPreloadList.js @@ -8,6 +8,8 @@ // 3. run `[path to]/run-mozilla.sh [path to]/xpcshell \ // [path to]/getHSTSPreloadlist.js \ // [absolute path to]/nsSTSPreloadlist.inc' +// Note: Running this file outputs a new nsSTSPreloadlist.inc in the current +// working directory. var Cc = Components.classes; var Ci = Components.interfaces; @@ -128,13 +130,10 @@ function processStsHeader(host, header, status, securityInfo) { host.name + ": " + e + "\n"); error = e; } - } - else { - if (status == 0) { - error = ERROR_CONNECTING_TO_HOST; - } else { - error = ERROR_NO_HSTS_HEADER; - } + } else if (status == 0) { + error = ERROR_CONNECTING_TO_HOST; + } else { + error = ERROR_NO_HSTS_HEADER; } let forceInclude = (host.forceInclude || host.pins == "google"); @@ -204,7 +203,13 @@ function getHSTSStatus(host, resultList) { } function compareHSTSStatus(a, b) { - return (a.name > b.name ? 1 : (a.name < b.name ? -1 : 0)); + if (a.name > b.name) { + return 1; + } + if (a.name < b.name) { + return -1; + } + return 0; } function writeTo(string, fos) { @@ -294,7 +299,7 @@ function getHSTSStatuses(inHosts, outStatuses) { var expectedOutputLength = inHosts.length; var tmpOutput = []; for (var i = 0; i < MAX_CONCURRENT_REQUESTS && inHosts.length > 0; i++) { - var host = inHosts.shift(); + let host = inHosts.shift(); dump("spinning off request to '" + host.name + "' (remaining retries: " + host.retries + ")\n"); getHSTSStatus(host, tmpOutput); @@ -311,7 +316,7 @@ function getHSTSStatuses(inHosts, outStatuses) { } if (inHosts.length > 0) { - var host = inHosts.shift(); + let host = inHosts.shift(); dump("spinning off request to '" + host.name + "' (remaining retries: " + host.retries + ")\n"); getHSTSStatus(host, tmpOutput); From 8832806e81e0c527ec3b8a8e0cf37e1fa51d97bf Mon Sep 17 00:00:00 2001 From: Julien Wajsberg Date: Fri, 26 Feb 2016 09:40:00 -0500 Subject: [PATCH 60/60] Bug 1250691 - [Devtools][Responsive mode] The "touchend" event should not have the removed touch. r=jryans --- devtools/client/responsivedesign/test/touch.html | 4 +++- devtools/shared/touch/simulator-content.js | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/devtools/client/responsivedesign/test/touch.html b/devtools/client/responsivedesign/test/touch.html index 44bf71f01666..61c25f5afd4b 100644 --- a/devtools/client/responsivedesign/test/touch.html +++ b/devtools/client/responsivedesign/test/touch.html @@ -33,6 +33,8 @@ }, true); div.addEventListener("touchend", function(evt) { - div.style.transform = "none"; + if (!evt.touches.length) { + div.style.transform = "none"; + } }, true); diff --git a/devtools/shared/touch/simulator-content.js b/devtools/shared/touch/simulator-content.js index 3c4b8444ff45..c4c803859ddd 100644 --- a/devtools/shared/touch/simulator-content.js +++ b/devtools/shared/touch/simulator-content.js @@ -284,9 +284,16 @@ var simulator = { evt.screenX, evt.screenY, evt.clientX, evt.clientY, 1, 1, 0, 0); + let touches = document.createTouchList(point); let targetTouches = touches; let changedTouches = touches; + if (name === "touchend" || name === "touchcancel") { + // "touchend" and "touchcancel" events should not have the removed touch + // neither in touches nor in targetTouches + touches = targetTouches = document.createTouchList(); + } + touchEvent.initTouchEvent(name, true, true, content, 0, false, false, false, false, touches, targetTouches, changedTouches);

    gj*K~W`UGrd*{DZ&O*%#+rG6QKMJlj&Ub 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"(g)=Q&ip~;Z#uCYZI0!DZXO>W zUu%VegoVP&ndaf)C>Vtu3iDkb6BGCRwP`GLLGtzW#piK+u3D_U?1w2Z2QyaF;BvsT z5M$=M8$F#`-XXL#{QdG@3+Czhc`001i7>*LT`3l7>cHIG+}p95s@$p9t!j^#dE5`5 z!$9LEco6J9E6k$@871JfPMWC@6%_?Tundt6Sm#|B(Fbax{}T>9m@CT<-6~TTM)2m4 z*h)Y|M1;$r=98LA1{P=qL@tzsSLKBTjO5*|JHUX+#W2ote?Eu|@d}uNmkPOcCOInk zc23X}C2FR^iYS@KsTm4bbl(XdVA!toAm%+kc=*tuE1H%;vjPofuEV#Jr~0EBfMLj0 zqAMsYT%W1ut#>~X$se)bTM(B^6)42xfL9wISA&1Q*4L+iz)S{|V41QJf+;BePZFYF zWHm^_FVL|(@kAL0gEmMm5GT7=BeF+Xqr#m zHSC7ZwStTAWO!v|CEuGeNUuNK9K(EB#E)}Wr@0dIr*{WZ?Il6!#nL>1TPH0Vi1tOL zSesG&)hiag+!3!9j^Iab_#)7;#g2_h!Ls96z>u$-s=<`rpSf+~@N z>;agU{Zc3qk%6lkZ9P?$jyKxhFRz$CG6cqYf9f7pxei=28n__BT^$_*GMb!E*PyZm z7NZD;FN?!!Qu4ur2ljEGN;=GNjTXk?L0K{Msv9KWBxXX;RT@koDjHfes8{osb_Ho} zv6NDTT()UT^Yc%qs~uixXOEa?A%?T=A09@7J`d}=0YiRBtsoUinJn;LLz}~G-?08) z&H28gW{1GM{C_7pyp)Mpb6;OyWNmG&cJlBDr@_V)$RH(bRv11r#n?+gWO<0)fx@;8 z#LbMadFR?=uI!q_S(tdND4XOUH((qH@=TO}SAV>6Ue;NG$x@B8uXXkyU&2L?19Ug!q#wRBcVnDq3gmM>V*YCl+$^pPK-&G3f zf|TiE7~a)HgYe;)>uVf8aIJZzLC9$xs!=GBu7D_}fbrQ!3(sSu{VLKd?xpEqf=Y(b zmQWEhl=qgVo+l^Y#;uhJZ91Z|v9Ym^;n_34Le0vd@5=P%V@1g}gzz+k{<5543B)A( ztWmfEH^FkIj=-lomI<4XP$Mn zdK@KUXEeQVOZc&!N4`1@hxJ}=a%dR!5NnsalXgIsoPjO532J5Ym$AMrT;19e)u zu7guk#6qMm#->+`G%Jgmj^RXe71DiY>TPLgXxvyne$L2v1{Q3p$}U4;dH?7rCde8G z^)CE|i<=wj^&VPUS)n(_idBQkLhpi?Mj@Av7?@5KaQ&xSL?WjhbrNdSwe?aSNS9RV>;fQ{X1SzHnLv>P6UP2b6h;$HCRfti#qgGs3Vy^&HI1_0=Z4Yb7YpTEUOARCl4Hu$Am+Z_fgyDw(ht zc=TFf{+kSx-TD(!04a56D~W)@Hl2o~jjr*IYcQT)6qjs40{9Hiw6I%3e7t(Pj^aSR zDwALSavk7A)JT_UCU3wn37j@5260=Bk|AAjSNpJtGSfkdf`S4VO`Hbs7V*9QK|u%8 zF0;4f2`%KxSRQ(8*$=_EYup!Fl44@WFuWLw>pGdtX)R~wJA>26+Z)p`h`Gph?mmy{ zA|`tSRLdol#MB*)YVLa}(#3FB++}5DWnp1CJkDX(E9>^kT3=ccD>olOYgW_LT;(As zE@4f*>c*?=o~agTAqtnqCnn~1c3u?Q41PmMBO=`$ieD(DB6pQHpZvVy>m5H< zO4{C0r#qIL{PQPTUhpa!1)UJzafrv-+8QY!Aw54|i~CAn7ElQIkozS}zd(USP)Zf= zx3#xN#l@+u<;O?rT2`Zqa9Zww3H@iG5=p6VV2}sC=2HhPS5BK5Ly&*4XZwIz*3knP z)l0>$8>6D4h_B6DcBW`6E)TaRq7beGKs%V(97Cu4O*vmhyo;B-(QO@WFZ8?TbBmmt z(}i^z{vjGJ#mqrLM#k4t4khJJfI2$FHTg`;O>tui<-n|_4{Mx}&Q&Se{Ci(`aBEar z_X28JZlscm3=&H9dZzs5XlFVR@sJfmo zTRrpksu|T_%JsufS2=-sd9<)))C>%vyNx#j?JosyE?Fav^1Ialqr&O@0Nm;4f!BDs z|IlZqtPu1ZjI0LB&7Qq*Ew1yV?Q1?coVLu-#>hmq0}W6N?wc@OS^~83*+zcxr>}b= zA3uGH4C*Z9RD?OUWb}n9At50TVF%e=ANi}~$L!+a27$LS2%sD$d-wJw^R5FpEMoP2 znBelR#=JZM(7B&M4HP=76lt0L*~9?XxF3`}lIfq^H=kR)YCL}W%sdk$3~NhcG~87x zt-K377bt7#tVn?FYa`XLE#L|Tz}WL2W85HH2xtTX3C_l=52;}&x!UzS$H&LS0-kYe zYo_&16FT12U{(2s-QIi-0|yE4!76MFHSAyeUsJ%5&wyV6y*6B7rCDELD0?yJbY1hP ze8C!q!&9-4zI0fTrBf~Hfl~$N3v<@<039%m32YAs*-ue&uLZTDK}MQP9g) z??dD@j@bYuoJ`OdoC!q1-$T3?C4i!h`;vk|<%1EuQ%ag;I`SO{W_;5HFRTNYZ3TM* z--8W4GgONLEHVIuwV&}09N)+TGCaKY61|rD;PQiq6-vnd2_8p~sTs|3xG@qEg2(ju z(W5V`taEpJYx|;U-&VQok^+t~hLXD^evhvR7r@5{Ng@Ke8g@R0Wp={Y=MN(39p#Mp*tjWwIHe+8FHf1_;uyoGF{qdN zgUgT(?5$E>q}J-E;WS}CNyt?1?+=IDF~6{&nC1#f4nFe*ssTZvOaO`S;ll^n1h!!H zGGq9FZ(<@*B8Qbe7@g{wZqF~D!*;T$Py;C1D?gUo%%*@%0hu#-`Ns;5ve!Vp+CIxu zPc`D$Ff`*;IN0}m5q@)34Qay#HCPTfktR@6hm4H8cEwXxUTy?3C>!@OeV|zD@aU)& z6jW;n-a#MlE|U6*y~p8NQ=QwvA+@qnuEGZpYF3vWEjB`Qx|mPe_3ltGeW_nxtWF$C zt14U%rL7D)4M_mJv}`(R!LawF3Z_cO(A`pRF$JhVNkxStueYyjW77|6HJ;z2f=_0o zrziB*9h8^wrS9;gbkQL24Y2{DL#0qM5N|B@OOi;09F`qWT8b9f{z)+q@ZrIPN$MN$ z;rRqn^krvm)i`aoL0Pm~iS8|6&nk$o!H^gYWlBjbdn~qv0Uro+puv0TVh)9A;odjb zo+r~TrsWz4_J};6G(Ij4iZS|Nk9-QST|j!^dp>AuzNFq7c0AgKx^)Vu(}E4@-UN;e zg!c!W-&=6_0JTxWC4!=4d>og#Umt+`m|tCOKU^RFP@wl0s7O{s3kMb!eDJV2t*1JU z&L;8J5xmVF^aWVh*!X@TAw>c=a!?qS%1#)Re!s%db9 zP*0`EyNmNxq^ocg2Rlrn1u&bWq~x!*wm@J92(D04rz9hP!xfi${W=Te32fYEAsM)= z^YimbJWikdB~o_p{ckw|{>av|4PjAHZ$Gn^bVpuxDXYPBZ8#a&Pj){K+X(goFYvt1 z#FU2|ou09?$ABNQdiG2#W6%~X0Nk{F&w}iqUAnShh?!x^_Mh*{GAY5uZzIo0;ek1F z$<08CL3Q^dQc?^A34k`~%dB^Rje{c&c3ee8h0Sz;yq!n&D|m|F@*!feK%BaZ=0JfA zg0Ju((Eej!AbSxU64C;l6?XaJbUfTsqSv0O2{q7+K=|Vc_sm6SaABcU{BDv{C~YkB ze!}zExVR1-?<=E2Wyv@AZ#iL+a5jCcvSweK#@&<0m>GLL|4vS>Ty(ZI`}azP5wdsv zS?aljMBF7FS+Kv_X~CxAdlV!@29xq~s+&|!pBX|@!nrp@zCe9Bv*VgVMx)Z(ua~Ob z|8x*RO{(JG#hIy8CMK(oZ;meNZ0+so{)LX0ZZv8HM)p;fm9fHpo_!X>CsKLNV`u4q z8GXuc21K|p7V0ZBm;d3psd)bT&GU@^YqFeb|Nhs;MnM|+6vM6YAN|vKQYm=)MIN+GN`Fipd$5Ozr{kH7pDlU)e!<3@);XjG`GV_31BsV%R!)k1g{R?7Lj2g zUPf9cej^hcvL+Xi1JuOmXi9I=7o322_fI5Kze0Nri410*R37M8!kzstg2j|A;dU&0 zB@2F8W9jgF3i%U7kN=&xtKP}4gF0-y=i1WJ(hcnoL;rFH(0V)HExgmVBn1J4s_0-j z97R&Q)_Dg_|=OmD{Y&_jeT%emtTTyGXX;5 z5)2NT`Jemp^73HM+cKr1;@Hd{zxqs^4jvtX^xD|y`ZwQF?YyngaQ3Ga6BYFv7zzaE z2Q&z9cOfeIMh7dsfSniT=Y`9Rd!Z>tm@pyYSUMt}0vv=ZCJfZr-oXLushpLy(MxCV z!ngCIroPXc_UvK0c#+TRU56< z-Zuj9UnoAah|L+e@~-PyvA-FSKYAB#g0-`CbXx)5Iml#o-re*GmIA1wkA%B92f5B!mS*=XFLA z5fKD`nWy%HqVf8i{vj^Iua*|kYmL`H>|{uUHTU&>#uPa90SofOWmg-he_?=t7NZ5i zc|GUT(V7II6FSv-%K5m6!-fa}0^-6V!Mm~f6VyNJvCH3=D%cMMk_<3j(AWkA+&yEU z=ZU#&g{}*(Pk@lU&ev&*w5prI?Cd998q1PAmrMa)wjC@;mHQE$c{!m^OAw~RVjH^kOkF3G zr6b-i!YTY3`i8K<2LHNH$MVNZQo5Zjp9=ne{R@a^tOL?I3*1J;OG@-a*FikoyRR-U z5yT3_7v!}^i{A0(fmkU@NJxDCTML9QI2UZTb3%wf56Iu}Lr%jEEW{7syZzA=fKEDy zAApDNVlA#Y^}asKsoMhbCbF!o48hL;o9cE3%pBqYXJ==?`bcRMs%#9T`~CNPu(9sz z04P)uloT*pOGec(O>tK-iO}C*9q!myAhZx)BkYH=Ohi))XN-7Ss^@<2jJ>zFcOI}N zLjWA9q})pzy)L#n>uqbU-Y<9INJYZ!u3>|Sjb^8HoZ4&Qq?Kq3XeY?Fe6 z8ldgz;o-5hy$xPE;p+spFR^3al^=GT>v9{Szj-At&J0AYU;9woXOf4%fTTx*CZT9; zJH<)A+uIj6H@g9S0D;5>I3I#~C2j}CNRW>$3%yoSL{|ZFtEs8|JDK$^11AKkV35`T zQiGPs0+nm8mZc~KsPkxH^LQB4FlxEY|B;N!5LyoM9r@t9k_Vqv`mPiV0Zg~|wze+; zA^ZmO59fNXgYXR^zVfcdv6Isq!l*p`j#Zj2nEwDp{)B!A?JvPOjJ~na(`y3Qpa#v2 z5JWaW3y5q*CM2Myak_Ovj~G(>-aaT-NqL!N0JMohn$&CPe9;26>NfEJniR97-MbxI zMr-)iyWUhMDr7<5)#i+oL^rL4iCqKo6+8*oF+CQ7M5dE6=GNrzSwEbfP< zZJ`7$aEP`J4&CK`qXaC5_u=xIfNO&2MFQdshu_>4L$6-zT)HF9 ztgQ3{dyJC!2K&IR(I9{+s75aDYd#1hvRRCV{`+TpygMuJ=*R}0sSukq!vrUNcTbkr zZ2IN5s3>e~YS{rz8mY(NxhfTD5p>j)s{b^71c9B){I7z8kn*=U3 zqJkgrHE>jDh8+n3NwHvY2Y@T|x;j#Iiw_963wKE@PpPYt47F?gJvJE`6PZIY@bX9l z)ea^Z74L}MN=r(9b$5p#Q2D~|2h|P`2NVFZeFdl%Dggm)G$#zVa0D zF(8)FNcrMG-H`F}@*=pzS?`-LAS=LvgByFR1iAr0egyiE8FHIzD=>*DKK6p0~8c`q`(P_PV$L;!$9Kb>j^x|{e9PQ1u!c$G*0pb!~^p@%0 z3P_297XWh5z{(1qVzsmk_{s?C+7LE5T;M!cZJ*(O^FfXn@4AnV4{V6Y_9&T|0#KgL>OF<8-Lwhg?B78MD23`@NeF2Qgz>aV^u3^DG(sfec1Q!=G zWoKtIXxGKL%(&g_s9BxJc!dc@*5qY8EzR9&ooWIuTXJwLPS4Id+kZ_>CH!m&lUxyB`)D{I_%w3|Th9-m*Tw|9;|Dkc_0{-<16? zElF2$>i;qO=>ONkq9P^PxYb+AKNb{QRJ$n&r9TfYj4rD3F#A3AI^DOPKyIWE^~q|} z72D2?TvOXYKJ`q3o%}LyR z5k~VkDtWVtCH(vgJ&28T zs>HLw5#ES@A;Ddff2>T+yB>NdTX8;1ajMJkV=zxGmNU!D!9$xw3;W{JN_E??DdlaK zX(Ml4HW!;5g}zCDW5(@05{<WY=F;Rcx}dPn4WWGYxX+9KEW| zf5^FZOZFRH6_0T{zQlbkLH%N<0?obfYm-Z zQ(Xs&CRay!c8t-jRLYl@wMW+e6qgnm3y#7$nEH?YPX|gRk zn{kVPD-#!I%f3OMle$0PL2BYa*&Z@kXx8gmX(h*(tDCKO!QOFl7Q51D1lspxWR&xw z^Pac!*0$W!=f>U_y1ww9mC&_L*Pk2EfR8g(ysva?d9A;b9eKISzuP!EOAb3(gl@Gy zxA;7WH5(o8P;F^>-p`Svptk9lv9jtt?_Jo9uPSsK?9cm4zL?iIj@k6%^|hAmoe&us zO2WAX4>(|+ZH6aKHO2;(mp_uvJ9O`b!cMe~9DQ>jR$sbJC@n$KR-7)ZA46=W;8XPhj_GI)>i*|*4w#06N? zOsuSYXS-Gow=}19r+bOQ-7MA~HH%=QjVe3;)NMJ&;2Nv^5^FVM8->{(w8YbtJuMTX zUOPyHJzP-j)P410@2u|N@T9PlQ}8E)g8KEzJLIyQr1UTsDpJ8A+npZK`lD=PX@PfB zaeB{2_De4-%CzVQ6XOT7g8w<7DTyx@!NeE&7DLIjua|Hx`mS^uv98HN72-RWUBn#bGTj8}v+ zByOS4gij6^va-wxCQq>R(jWXZefP!c!n2C-Z@3>#?O>j!vc7>Lfxz6$bu;xau1kFi z?DnL&Jp=T`oGRNTEtev(ljV+y*fZTgBIzt&*gb?iwJH{QW6Ul}yHeMTQq_C~tBzdA+|3Lmm~tti2&gi^S2qs)r$0Q z?FddjJp6ld(cx_~Ir7D)B{@&CKU?kKsP}{s7N(xkU9#a_cpsLCnO%E3z@{bQ0{s7m zA00BMtzy)n0#98AZ0g>{*0o&f*y!r$Y5Z<+nY((FN)xO-W`s4=!`^J*iH*!&R$s z&+f0Db6oDZc${@jS2v)~-b^OMYHZK9mA``O&e)XqNvB4yDG9^GQg5-J{>up5Keib8 zVZ4vVS)?u1>}~KQ=ksi=NfGYIK6{~SwJJN3rKN1VK;=`~P7N;DWulTMp@_e<>!8u*S#VX7Sg*$NcwOzY;d8il_$B*S@RRY zJ&PE_t3VgsX{TUnEC?3M?x?RMIZY7P7GQ}Kts85hBN zJc`q6SLWz=dNZjmcV|4^%O`l%b|xoHXuxR4Xranb@@;h%cO`qzqRjO&_o0YFMLnIs zMJcn4DtnGzMnTkYEjD3^a}+08U#FXE@dr(ns-^bUgV4$lO}A>lzMbg@N4K~LiC<0C z|D>?WNODrC_SVLhlK$k?5L;v|w^lw=x92>4J4ZFcn7bZBBS-mfLA&LGe(I9TL0|!W zv`gDqto+M~Fn6X+)XRYn_@n}^EPSSxDIv9?NHKJpOXIZBD)G`XW=r|ct?=yyaoyZp zMD8@4SKRfYPh1{Pak3(?x9K-GA*#+8aoZ#@iS8=U!J-MDrs1G2A73!a$v3Gf<$E{g zc!Y+wneb2lIjiarv&-A1&(dR$_zHcK30_z)b9-~79IP%ZcfP>uGn!_#oGjJE0tveEcv#ZY5SB- zpk3}qnzn~%ZvkzN`o*I1_4yTwHVNJEkFsY1@4i3TU{o+)O)!7_vceKI{*>ve|7qg&Os7UHWjgT`RsxdiQRk!;{<(keZAGJm}kbFRL9%F)a-v_0z`yUSUVnya@KOt9OLwUY={zRZuxd4Ldsn8 zVtrlXD`SJ$Ws4&KCMw&pcSuuwmISOt0(Vfx=xp6_t9x=srWc1_bA|%ASZSnb+*Q@; z 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�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ΠI7i==Ra@?1o1xO@Lu5tMQ^^BF(Yd~$Mf&)>h_ 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 temporaryDbFiles; + + @Override + public void setUp() throws Exception { + super.setUp(); + // TODO: We already install & remove the profile directory each run so it'd be safer for clean-up to store + // this there. That being said, temporary files are still stored in the application directory so these temporary + // files will get cleaned up when the application is uninstalled or when data is cleared. + temporaryDbFiles = new ArrayList<>(); + } + + @Override + public void tearDown() throws Exception { + super.tearDown(); + for (final File dbFile : temporaryDbFiles) { + dbFile.delete(); + } + } + + /** + * @throws IOException if the database cannot be copied. + */ + public void test() throws IOException { + for (int i = TEST_FROM_VERSION; i < BrowserDatabaseHelper.DATABASE_VERSION; ++i) { + Log.d(LOGTAG, "Testing upgrade from version: " + i); + final String tempDbPath = copyDatabase(i); + final BrowserDatabaseHelper dbHelperToUpgrade = new BrowserDatabaseHelper(getActivity(), tempDbPath); + // Ideally, we'd test upgrading version i to version i + 1 but this method does not permit that. Alas! + fAssertEquals("DB helper should upgrade to latest version", + BrowserDatabaseHelper.DATABASE_VERSION, dbHelperToUpgrade.getWritableDatabase().getVersion()); + } + } + + /** + * Copies the database from the assets directory to a temporary test file. + * + * @param version version of the database to copy. + * @return the String path to the new copy of the database + * @throws IOException if reading the existing database or writing the temporary database fails + */ + private String copyDatabase(final int version) throws IOException { + final InputStream inputStream = openDbFromAssets(version); + try { + final File dbDestination = File.createTempFile("temporaryDB-v" + version + "_", "db"); + temporaryDbFiles.add(dbDestination); + Log.d(LOGTAG, "Moving DB from assets to " + dbDestination.getPath()); + + final OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(dbDestination)); + try { + final byte[] buffer = new byte[1024]; + int len; + while ((len = inputStream.read(buffer)) > 0) { + outputStream.write(buffer, 0, len); + } + outputStream.flush(); + } finally { + outputStream.close(); + } + + return dbDestination.getPath(); + } finally { + inputStream.close(); + } + } + + private InputStream openDbFromAssets(final int version) throws IOException { + final String dbAssetPath = String.format("browser_db_upgrade" + File.separator + String.format("v%d.db", version)); + Log.d(LOGTAG, "Opening DB from assets: " + dbAssetPath); + try { + return new BufferedInputStream(getInstrumentation().getContext().getAssets().open(dbAssetPath)); + } catch (final FileNotFoundException e) { + throw new IllegalStateException("If you're upgrading the browser.db version, " + + "you need to provide an old version of the database for this test! See the javadoc.", e); + } + } +} From 05b2656e932e4385f4869b88f9ebb075e15856e2 Mon Sep 17 00:00:00 2001 From: Michael Comella Date: Thu, 25 Feb 2016 15:27:46 -0800 Subject: [PATCH 21/60] Bug 1250707 - Register url annotations table with BrowserProvider; add query. r=sebastian MozReview-Commit-ID: FnU7D8p3H1O --HG-- extra : rebase_source : 39f3f523c3fcaa71dc99fa2561d279b7ca117477 --- .../org/mozilla/gecko/db/BrowserContract.java | 2 ++ .../org/mozilla/gecko/db/BrowserProvider.java | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/mobile/android/base/java/org/mozilla/gecko/db/BrowserContract.java b/mobile/android/base/java/org/mozilla/gecko/db/BrowserContract.java index e6ae597b55e1..d10cc041c9aa 100644 --- a/mobile/android/base/java/org/mozilla/gecko/db/BrowserContract.java +++ b/mobile/android/base/java/org/mozilla/gecko/db/BrowserContract.java @@ -485,10 +485,12 @@ public class BrowserContract { public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "suggestedsites"); } + @RobocopTarget public static final class UrlAnnotations implements CommonColumns, DateSyncColumns { private UrlAnnotations() {} public static final String TABLE_NAME = "urlannotations"; + public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, TABLE_NAME); public static final String URL = "url"; public static final String KEY = "key"; diff --git a/mobile/android/base/java/org/mozilla/gecko/db/BrowserProvider.java b/mobile/android/base/java/org/mozilla/gecko/db/BrowserProvider.java index 5fa8d5e1368a..2120d723b0c0 100644 --- a/mobile/android/base/java/org/mozilla/gecko/db/BrowserProvider.java +++ b/mobile/android/base/java/org/mozilla/gecko/db/BrowserProvider.java @@ -18,6 +18,7 @@ import org.mozilla.gecko.db.BrowserContract.History; import org.mozilla.gecko.db.BrowserContract.Schema; import org.mozilla.gecko.db.BrowserContract.Tabs; import org.mozilla.gecko.db.BrowserContract.Thumbnails; +import org.mozilla.gecko.db.BrowserContract.UrlAnnotations; import org.mozilla.gecko.db.DBUtils.UpdateOperation; import org.mozilla.gecko.sync.Utils; @@ -60,6 +61,7 @@ public class BrowserProvider extends SharedBrowserDatabaseProvider { static final String TABLE_FAVICONS = Favicons.TABLE_NAME; static final String TABLE_THUMBNAILS = Thumbnails.TABLE_NAME; static final String TABLE_TABS = Tabs.TABLE_NAME; + static final String TABLE_URL_ANNOTATIONS = UrlAnnotations.TABLE_NAME; static final String VIEW_COMBINED = Combined.VIEW_NAME; static final String VIEW_BOOKMARKS_WITH_FAVICONS = Bookmarks.VIEW_WITH_FAVICONS; @@ -98,6 +100,8 @@ public class BrowserProvider extends SharedBrowserDatabaseProvider { static final int THUMBNAILS = 800; static final int THUMBNAIL_ID = 801; + static final int URL_ANNOTATIONS = 900; + static final String DEFAULT_BOOKMARKS_SORT_ORDER = Bookmarks.TYPE + " ASC, " + Bookmarks.POSITION + " ASC, " + Bookmarks._ID + " ASC"; @@ -112,6 +116,7 @@ public class BrowserProvider extends SharedBrowserDatabaseProvider { static final Map SCHEMA_PROJECTION_MAP; static final Map FAVICONS_PROJECTION_MAP; static final Map THUMBNAILS_PROJECTION_MAP; + static final Map URL_ANNOTATIONS_PROJECTION_MAP; static final Table[] sTables; static { @@ -190,6 +195,19 @@ public class BrowserProvider extends SharedBrowserDatabaseProvider { map.put(Thumbnails.DATA, Thumbnails.DATA); THUMBNAILS_PROJECTION_MAP = Collections.unmodifiableMap(map); + // Url annotations + URI_MATCHER.addURI(BrowserContract.AUTHORITY, TABLE_URL_ANNOTATIONS, URL_ANNOTATIONS); + + map = new HashMap<>(); + map.put(UrlAnnotations._ID, UrlAnnotations._ID); + map.put(UrlAnnotations.URL, UrlAnnotations.URL); + map.put(UrlAnnotations.KEY, UrlAnnotations.KEY); + map.put(UrlAnnotations.VALUE, UrlAnnotations.VALUE); + map.put(UrlAnnotations.DATE_CREATED, UrlAnnotations.DATE_CREATED); + map.put(UrlAnnotations.DATE_MODIFIED, UrlAnnotations.DATE_MODIFIED); + map.put(UrlAnnotations.SYNC_STATUS, UrlAnnotations.SYNC_STATUS); + URL_ANNOTATIONS_PROJECTION_MAP = Collections.unmodifiableMap(map); + // Combined bookmarks and history URI_MATCHER.addURI(BrowserContract.AUTHORITY, "combined", COMBINED); @@ -736,6 +754,13 @@ public class BrowserProvider extends SharedBrowserDatabaseProvider { break; } + case URL_ANNOTATIONS: + debug("Query is on url annotations: " + uri); + + qb.setProjectionMap(URL_ANNOTATIONS_PROJECTION_MAP); + qb.setTables(TABLE_URL_ANNOTATIONS); + break; + case SCHEMA: { debug("Query is on schema."); MatrixCursor schemaCursor = new MatrixCursor(new String[] { Schema.VERSION }); From 2c478e100e1fcf09a1f02f5d241601101ced7b15 Mon Sep 17 00:00:00 2001 From: Michael Comella Date: Thu, 25 Feb 2016 15:28:28 -0800 Subject: [PATCH 22/60] Bug 1250707 - Add insert method to url annotations table in BrowserProvider. r=sebastian MozReview-Commit-ID: 8clkXPqmpOV --HG-- extra : rebase_source : 5369686567ff03734015ae3e0fd6ab26c57d2f86 --- .../org/mozilla/gecko/db/BrowserProvider.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/mobile/android/base/java/org/mozilla/gecko/db/BrowserProvider.java b/mobile/android/base/java/org/mozilla/gecko/db/BrowserProvider.java index 2120d723b0c0..60b7ffc29107 100644 --- a/mobile/android/base/java/org/mozilla/gecko/db/BrowserProvider.java +++ b/mobile/android/base/java/org/mozilla/gecko/db/BrowserProvider.java @@ -508,6 +508,12 @@ public class BrowserProvider extends SharedBrowserDatabaseProvider { break; } + case URL_ANNOTATIONS: { + trace("Insert on URL_ANNOTATIONS: " + uri); + id = insertUrlAnnotation(uri, values); + break; + } + default: { Table table = findTableFor(match); if (table == null) { @@ -1213,6 +1219,15 @@ public class BrowserProvider extends SharedBrowserDatabaseProvider { return db.insertOrThrow(TABLE_THUMBNAILS, null, values); } + private long insertUrlAnnotation(final Uri uri, final ContentValues values) { + final String url = values.getAsString(UrlAnnotations.URL); + trace("Inserting url annotations for URL: " + url); + + final SQLiteDatabase db = getWritableDatabase(uri); + beginWrite(db); + return db.insertOrThrow(TABLE_URL_ANNOTATIONS, null, values); + } + private int updateOrInsertThumbnail(Uri uri, ContentValues values, String selection, String[] selectionArgs) { return updateThumbnail(uri, values, selection, selectionArgs, From 85dd5960f8a195514762178b48e82f624fd90bd8 Mon Sep 17 00:00:00 2001 From: Michael Comella Date: Thu, 25 Feb 2016 15:34:01 -0800 Subject: [PATCH 23/60] Bug 1250707 - Test insert to url annotations table through BrowserProvider. r=sebastian MozReview-Commit-ID: 2UqLgskqAPc --HG-- extra : rebase_source : 4ba3ba783049e0f5664759b83e288813f82d9c3c --- .../gecko/tests/testBrowserProvider.java | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testBrowserProvider.java b/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testBrowserProvider.java index 8869b16fc3cb..bab3cd653081 100644 --- a/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testBrowserProvider.java +++ b/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testBrowserProvider.java @@ -9,6 +9,7 @@ import java.util.Random; import org.mozilla.gecko.background.db.CursorDumper; import org.mozilla.gecko.db.BrowserContract; +import org.mozilla.gecko.db.BrowserContract.UrlAnnotations.SyncStatus; import android.content.ContentProviderOperation; import android.content.ContentProviderResult; @@ -187,6 +188,17 @@ public class testBrowserProvider extends ContentProviderTest { return thumbnailEntry; } + private ContentValues createUrlAnnotationEntry(final String url, final String key, final String value, + final long dateCreated) { + final ContentValues values = new ContentValues(); + values.put(BrowserContract.UrlAnnotations.URL, url); + values.put(BrowserContract.UrlAnnotations.KEY, key); + values.put(BrowserContract.UrlAnnotations.VALUE, value); + values.put(BrowserContract.UrlAnnotations.DATE_CREATED, dateCreated); + values.put(BrowserContract.UrlAnnotations.DATE_MODIFIED, dateCreated); + return values; + } + private ContentValues createOneHistoryEntry() throws Exception { return createHistoryEntry("Example", "http://example.com", 10, System.currentTimeMillis()); } @@ -224,6 +236,13 @@ public class testBrowserProvider extends ContentProviderTest { null); } + private Cursor getUrlAnnotationByUrl(final String url) throws Exception { + return mProvider.query(BrowserContract.UrlAnnotations.CONTENT_URI, null, + BrowserContract.UrlAnnotations.URL + " = ?", + new String[] { url }, + null); + } + @Override public void setUp() throws Exception { super.setUp(sBrowserProviderCallable, BrowserContract.AUTHORITY, "browser.db"); @@ -249,6 +268,8 @@ public class testBrowserProvider extends ContentProviderTest { mTests.add(new TestUpdateHistoryThumbnails()); mTests.add(new TestDeleteHistoryThumbnails()); + mTests.add(new TestInsertUrlAnnotations()); + mTests.add(new TestBatchOperations()); mTests.add(new TestCombinedView()); @@ -1410,6 +1431,36 @@ public class testBrowserProvider extends ContentProviderTest { } } + private class TestInsertUrlAnnotations extends TestCase { + @Override + public void test() throws Exception { + final String url = "http://mozilla.org"; + final String key = "todo"; + final String value = "v"; + final long dateCreated = System.currentTimeMillis(); + + mProvider.insert(BrowserContract.UrlAnnotations.CONTENT_URI, createUrlAnnotationEntry(url, key, value, dateCreated)); + + final Cursor c = getUrlAnnotationByUrl(url); + try { + mAsserter.is(c.moveToFirst(), true, "Inserted url annotation found"); + + mAsserter.is(c.getString(c.getColumnIndex(BrowserContract.UrlAnnotations.KEY)), key, + "Inserted url annotation has correct key"); + mAsserter.is(c.getString(c.getColumnIndex(BrowserContract.UrlAnnotations.VALUE)), value, + "Inserted url annotation has correct value"); + mAsserter.is(c.getLong(c.getColumnIndex(BrowserContract.UrlAnnotations.DATE_CREATED)), dateCreated, + "Inserted url annotation has correct created"); + mAsserter.is(c.getLong(c.getColumnIndex(BrowserContract.UrlAnnotations.DATE_MODIFIED)), dateCreated, + "Inserted url annotation has correct date modified"); + mAsserter.is(c.getInt(c.getColumnIndex(BrowserContract.UrlAnnotations.SYNC_STATUS)), SyncStatus.NEW.getDBValue(), + "Inserted url annotation has default sync status"); + } finally { + c.close(); + } + } + } + private class TestCombinedView extends TestCase { @Override public void test() throws Exception { From 63eca03a7dd7e0e79159e9137682ae93008cdd08 Mon Sep 17 00:00:00 2001 From: Michael Comella Date: Thu, 25 Feb 2016 17:53:35 -0800 Subject: [PATCH 24/60] Bug 1250707 - Add UrlAnnotations with insertion. r=sebastian MozReview-Commit-ID: A93dzl7hJPG --HG-- extra : rebase_source : 486d2537493d688dcff21c3c8634cc3ba72eb91d --- .../java/org/mozilla/gecko/db/BrowserDB.java | 2 ++ .../org/mozilla/gecko/db/LocalBrowserDB.java | 8 +++++ .../mozilla/gecko/db/LocalUrlAnnotations.java | 31 +++++++++++++++++++ .../org/mozilla/gecko/db/StubBrowserDB.java | 11 +++++++ .../org/mozilla/gecko/db/UrlAnnotations.java | 12 +++++++ mobile/android/base/moz.build | 2 ++ 6 files changed, 66 insertions(+) create mode 100644 mobile/android/base/java/org/mozilla/gecko/db/LocalUrlAnnotations.java create mode 100644 mobile/android/base/java/org/mozilla/gecko/db/UrlAnnotations.java diff --git a/mobile/android/base/java/org/mozilla/gecko/db/BrowserDB.java b/mobile/android/base/java/org/mozilla/gecko/db/BrowserDB.java index a55881f0b1da..13dbe146e386 100644 --- a/mobile/android/base/java/org/mozilla/gecko/db/BrowserDB.java +++ b/mobile/android/base/java/org/mozilla/gecko/db/BrowserDB.java @@ -10,6 +10,7 @@ import java.util.EnumSet; import java.util.List; import org.mozilla.gecko.GeckoProfile; +import org.mozilla.gecko.annotation.RobocopTarget; import org.mozilla.gecko.db.BrowserContract.ExpirePriority; import org.mozilla.gecko.distribution.Distribution; import org.mozilla.gecko.favicons.decoders.LoadFaviconResult; @@ -43,6 +44,7 @@ public interface BrowserDB { public abstract TabsAccessor getTabsAccessor(); public abstract URLMetadata getURLMetadata(); public abstract ReadingListAccessor getReadingListAccessor(); + @RobocopTarget UrlAnnotations getUrlAnnotations(); /** * Add default bookmarks to the database. diff --git a/mobile/android/base/java/org/mozilla/gecko/db/LocalBrowserDB.java b/mobile/android/base/java/org/mozilla/gecko/db/LocalBrowserDB.java index 86fc4bc7a39e..6478739c0560 100644 --- a/mobile/android/base/java/org/mozilla/gecko/db/LocalBrowserDB.java +++ b/mobile/android/base/java/org/mozilla/gecko/db/LocalBrowserDB.java @@ -101,6 +101,7 @@ public class LocalBrowserDB implements BrowserDB { private LocalTabsAccessor tabsAccessor; private LocalURLMetadata urlMetadata; private LocalReadingListAccessor readingListAccessor; + private LocalUrlAnnotations urlAnnotations; private static final String[] DEFAULT_BOOKMARK_COLUMNS = new String[] { Bookmarks._ID, @@ -134,6 +135,7 @@ public class LocalBrowserDB implements BrowserDB { tabsAccessor = new LocalTabsAccessor(mProfile); urlMetadata = new LocalURLMetadata(mProfile); readingListAccessor = new LocalReadingListAccessor(mProfile); + urlAnnotations = new LocalUrlAnnotations(mProfile); } @Override @@ -156,6 +158,12 @@ public class LocalBrowserDB implements BrowserDB { return readingListAccessor; } + @RobocopTarget + @Override + public UrlAnnotations getUrlAnnotations() { + return urlAnnotations; + } + /** * Not thread safe. A helper to allocate new IDs for arbitrary strings. */ diff --git a/mobile/android/base/java/org/mozilla/gecko/db/LocalUrlAnnotations.java b/mobile/android/base/java/org/mozilla/gecko/db/LocalUrlAnnotations.java new file mode 100644 index 000000000000..58e53ad4809c --- /dev/null +++ b/mobile/android/base/java/org/mozilla/gecko/db/LocalUrlAnnotations.java @@ -0,0 +1,31 @@ +/* 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/. */ + +package org.mozilla.gecko.db; + +import android.content.ContentResolver; +import android.content.ContentValues; +import android.net.Uri; +import org.mozilla.gecko.annotation.RobocopTarget; + +public class LocalUrlAnnotations implements UrlAnnotations { + private Uri urlAnnotationsTableWithProfile; + + public LocalUrlAnnotations(final String profile) { + urlAnnotationsTableWithProfile = DBUtils.appendProfile(profile, BrowserContract.UrlAnnotations.CONTENT_URI); + } + + @RobocopTarget + @Override + public void insertAnnotation(final ContentResolver cr, final String url, final String key, final String value) { + final long creationTime = System.currentTimeMillis(); + final ContentValues values = new ContentValues(5); + values.put(BrowserContract.UrlAnnotations.URL, url); + values.put(BrowserContract.UrlAnnotations.KEY, key); + values.put(BrowserContract.UrlAnnotations.VALUE, value); + values.put(BrowserContract.UrlAnnotations.DATE_CREATED, creationTime); + values.put(BrowserContract.UrlAnnotations.DATE_MODIFIED, creationTime); + cr.insert(urlAnnotationsTableWithProfile, values); + } +} diff --git a/mobile/android/base/java/org/mozilla/gecko/db/StubBrowserDB.java b/mobile/android/base/java/org/mozilla/gecko/db/StubBrowserDB.java index 9ae0a2c38568..52a34f368da8 100644 --- a/mobile/android/base/java/org/mozilla/gecko/db/StubBrowserDB.java +++ b/mobile/android/base/java/org/mozilla/gecko/db/StubBrowserDB.java @@ -150,6 +150,11 @@ class StubTabsAccessor implements TabsAccessor { public synchronized void persistLocalTabs(final ContentResolver cr, final Iterable tabs) { } } +class StubUrlAnnotations implements UrlAnnotations { + @Override + public void insertAnnotation(ContentResolver cr, String url, String key, String value) {} +} + /* * This base implementation just stubs all methods. For the * real implementations, see LocalBrowserDB.java. @@ -159,6 +164,7 @@ public class StubBrowserDB implements BrowserDB { private final StubTabsAccessor tabsAccessor = new StubTabsAccessor(); private final StubURLMetadata urlMetadata = new StubURLMetadata(); private final StubReadingListAccessor readingListAccessor = new StubReadingListAccessor(); + private final StubUrlAnnotations urlAnnotations = new StubUrlAnnotations(); @Override public Searches getSearches() { @@ -180,6 +186,11 @@ public class StubBrowserDB implements BrowserDB { return readingListAccessor; } + @Override + public UrlAnnotations getUrlAnnotations() { + return urlAnnotations; + } + protected static final Integer FAVICON_ID_NOT_FOUND = Integer.MIN_VALUE; public StubBrowserDB(String profile) { diff --git a/mobile/android/base/java/org/mozilla/gecko/db/UrlAnnotations.java b/mobile/android/base/java/org/mozilla/gecko/db/UrlAnnotations.java new file mode 100644 index 000000000000..907618ed3f01 --- /dev/null +++ b/mobile/android/base/java/org/mozilla/gecko/db/UrlAnnotations.java @@ -0,0 +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/. */ + +package org.mozilla.gecko.db; + +import android.content.ContentResolver; +import org.mozilla.gecko.annotation.RobocopTarget; + +public interface UrlAnnotations { + @RobocopTarget void insertAnnotation(ContentResolver cr, String url, String key, String value); +} diff --git a/mobile/android/base/moz.build b/mobile/android/base/moz.build index b564a15eeb7b..5ea279145dc4 100644 --- a/mobile/android/base/moz.build +++ b/mobile/android/base/moz.build @@ -225,6 +225,7 @@ gbjar.sources += ['java/org/mozilla/gecko/' + x for x in [ 'db/LocalReadingListAccessor.java', 'db/LocalSearches.java', 'db/LocalTabsAccessor.java', + 'db/LocalUrlAnnotations.java', 'db/LocalURLMetadata.java', 'db/PasswordsProvider.java', 'db/PerProfileDatabaseProvider.java', @@ -243,6 +244,7 @@ gbjar.sources += ['java/org/mozilla/gecko/' + x for x in [ 'db/TabsAccessor.java', 'db/TabsProvider.java', 'db/TopSitesCursorWrapper.java', + 'db/UrlAnnotations.java', 'db/URLMetadata.java', 'db/URLMetadataTable.java', 'DevToolsAuthHelper.java', From 078eda97bb4a47f441cb134d3d34d82b706c6523 Mon Sep 17 00:00:00 2001 From: Michael Comella Date: Thu, 25 Feb 2016 17:47:00 -0800 Subject: [PATCH 25/60] Bug 1250707 - Add test for UrlAnnotations.insert. r=sebastian MozReview-Commit-ID: LmnxRlcxIi --HG-- extra : rebase_source : 7bad7592d739dfdf1a36e58ca942b75d1ad2746a --- .../gecko/tests/testBrowserProvider.java | 45 +++++++++++++++---- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testBrowserProvider.java b/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testBrowserProvider.java index bab3cd653081..5d456a16812c 100644 --- a/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testBrowserProvider.java +++ b/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testBrowserProvider.java @@ -1434,6 +1434,11 @@ public class testBrowserProvider extends ContentProviderTest { private class TestInsertUrlAnnotations extends TestCase { @Override public void test() throws Exception { + testInsertionViaContentProvider(); + testInsertionViaUrlAnnotations(); + } + + private void testInsertionViaContentProvider() throws Exception { final String url = "http://mozilla.org"; final String key = "todo"; final String value = "v"; @@ -1444,21 +1449,45 @@ public class testBrowserProvider extends ContentProviderTest { final Cursor c = getUrlAnnotationByUrl(url); try { mAsserter.is(c.moveToFirst(), true, "Inserted url annotation found"); - - mAsserter.is(c.getString(c.getColumnIndex(BrowserContract.UrlAnnotations.KEY)), key, - "Inserted url annotation has correct key"); - mAsserter.is(c.getString(c.getColumnIndex(BrowserContract.UrlAnnotations.VALUE)), value, - "Inserted url annotation has correct value"); + assertKeyValueSync(c, key, value); mAsserter.is(c.getLong(c.getColumnIndex(BrowserContract.UrlAnnotations.DATE_CREATED)), dateCreated, - "Inserted url annotation has correct created"); + "Inserted url annotation has correct date created"); mAsserter.is(c.getLong(c.getColumnIndex(BrowserContract.UrlAnnotations.DATE_MODIFIED)), dateCreated, "Inserted url annotation has correct date modified"); - mAsserter.is(c.getInt(c.getColumnIndex(BrowserContract.UrlAnnotations.SYNC_STATUS)), SyncStatus.NEW.getDBValue(), - "Inserted url annotation has default sync status"); } finally { c.close(); } } + + private void testInsertionViaUrlAnnotations() throws Exception { + final String url = "http://hello.org"; + final String key = "toTheUniverse"; + final String value = "42a"; + final long timeBeforeCreation = System.currentTimeMillis(); + + getTestProfile().getDB().getUrlAnnotations().insertAnnotation(mResolver, url, key, value); + + final Cursor c = getUrlAnnotationByUrl(url); + try { + mAsserter.is(c.moveToFirst(), true, "Inserted url annotation found"); + assertKeyValueSync(c, key, value); + mAsserter.is(true, c.getLong(c.getColumnIndex(BrowserContract.UrlAnnotations.DATE_CREATED)) >= timeBeforeCreation, + "Inserted url annotation has date created greater than or equal to time saved before insertion"); + mAsserter.is(true, c.getLong(c.getColumnIndex(BrowserContract.UrlAnnotations.DATE_MODIFIED)) >= timeBeforeCreation, + "Inserted url annotation has correct date modified greater than or equal to time saved before insertion"); + } finally { + c.close(); + } + } + + private void assertKeyValueSync(final Cursor c, final String key, final String value) { + mAsserter.is(c.getString(c.getColumnIndex(BrowserContract.UrlAnnotations.KEY)), key, + "Inserted url annotation has correct key"); + mAsserter.is(c.getString(c.getColumnIndex(BrowserContract.UrlAnnotations.VALUE)), value, + "Inserted url annotation has correct value"); + mAsserter.is(c.getInt(c.getColumnIndex(BrowserContract.UrlAnnotations.SYNC_STATUS)), SyncStatus.NEW.getDBValue(), + "Inserted url annotation has default sync status"); + } } private class TestCombinedView extends TestCase { From 32bc04cb3c5b873afcf29cefa0c182885866ad6b Mon Sep 17 00:00:00 2001 From: James Long Date: Fri, 26 Feb 2016 14:40:38 -0500 Subject: [PATCH 26/60] Bug 1243406 - enable CSS/SVG/PNG hot reloading for all devtools panels r=bgrins --- devtools/client/debugger/debugger.xul | 2 +- devtools/client/shared/browser-loader.js | 31 +--- devtools/client/shared/css-reload.js | 142 ++++++++++++++++++ devtools/client/shared/file-watcher-worker.js | 44 +++++- devtools/client/shared/file-watcher.js | 39 ++--- devtools/client/shared/moz.build | 1 + devtools/client/shared/theme-switching.js | 7 +- 7 files changed, 212 insertions(+), 54 deletions(-) create mode 100644 devtools/client/shared/css-reload.js diff --git a/devtools/client/debugger/debugger.xul b/devtools/client/debugger/debugger.xul index ce0b0ca67dd2..06b964184a7c 100644 --- a/devtools/client/debugger/debugger.xul +++ b/devtools/client/debugger/debugger.xul @@ -4,7 +4,7 @@ - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - + { - this.hotReloadFile(window, componentProxies, fileURI); + const onFileChanged = (_, relativePath) => { + this.hotReloadFile(window, componentProxies, + "resource://devtools/" + relativePath); }; watcher.on("file-changed", onFileChanged); @@ -185,13 +190,7 @@ BrowserLoaderBuilder.prototype = { }); }, - clearCache: function() { - Services.obs.notifyObservers(null, "startupcache-invalidate", null); - }, - hotReloadFile: function(window, componentProxies, fileURI) { - dump("Hot reloading: " + fileURI + "\n"); - if (fileURI.match(/\.js$/)) { // Test for React proxy components const proxy = componentProxies.get(fileURI); @@ -199,23 +198,9 @@ BrowserLoaderBuilder.prototype = { // Remove the old module and re-require the new one; the require // hook in the loader will take care of the rest delete this.loader.modules[fileURI]; - this.clearCache(); + clearCache(); this.require(fileURI); } - } else if (fileURI.match(/\.css$/)) { - const links = [...window.document.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "link")]; - links.forEach(link => { - if (link.href.indexOf(fileURI) === 0) { - const parentNode = link.parentNode; - const newLink = window.document.createElementNS("http://www.w3.org/1999/xhtml", "link"); - newLink.rel = "stylesheet"; - newLink.type = "text/css"; - newLink.href = fileURI + "?s=" + Math.random(); - - parentNode.insertBefore(newLink, link); - parentNode.removeChild(link); - } - }); } } }; diff --git a/devtools/client/shared/css-reload.js b/devtools/client/shared/css-reload.js new file mode 100644 index 000000000000..919e416efb04 --- /dev/null +++ b/devtools/client/shared/css-reload.js @@ -0,0 +1,142 @@ +/* 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/. */ +"use strict"; + +const { Services } = require("resource://gre/modules/Services.jsm"); +const { getTheme } = require("devtools/client/shared/theme"); + +function iterStyleNodes(window, func) { + for (let node of window.document.childNodes) { + // Look for ProcessingInstruction nodes. + if (node.nodeType === 7) { + func(node); + } + } + + const links = window.document.getElementsByTagNameNS( + "http://www.w3.org/1999/xhtml", "link" + ); + for (let node of links) { + func(node); + } +} + +function replaceCSS(window, fileURI) { + const document = window.document; + const randomKey = Math.random(); + Services.obs.notifyObservers(null, "startupcache-invalidate", null); + + // Scan every CSS tag and reload ones that match the file we are + // looking for. + iterStyleNodes(window, node => { + if (node.nodeType === 7) { + // xml-stylesheet declaration + if (node.data.includes(fileURI)) { + const newNode = window.document.createProcessingInstruction( + "xml-stylesheet", + `href="${fileURI}?s=${randomKey}" type="text/css"` + ); + document.insertBefore(newNode, node); + document.removeChild(node); + } + } else if (node.href.includes(fileURI)) { + const parentNode = node.parentNode; + const newNode = window.document.createElementNS( + "http://www.w3.org/1999/xhtml", + "link" + ); + newNode.rel = "stylesheet"; + newNode.type = "text/css"; + newNode.href = fileURI + "?s=" + randomKey; + + parentNode.insertBefore(newNode, node); + parentNode.removeChild(node); + } + }); +} + +function _replaceResourceInSheet(sheet, filename, randomKey) { + for (let i = 0; i < sheet.cssRules.length; i++) { + const rule = sheet.cssRules[i]; + if (rule.type === rule.IMPORT_RULE) { + _replaceResourceInSheet(rule.styleSheet, filename); + } else if (rule.cssText.includes(filename)) { + // Strip off any existing query strings. This might lose + // updates for files if there are multiple resources + // referenced in the same rule, but the chances of someone hot + // reloading multiple resources in the same rule is very low. + const text = rule.cssText.replace(/\?s=0.\d+/g, ""); + const newRule = ( + text.replace(filename, filename + "?s=" + randomKey) + ); + + sheet.deleteRule(i); + sheet.insertRule(newRule, i); + } + } +} + +function replaceCSSResource(window, fileURI) { + const document = window.document; + const randomKey = Math.random(); + + // Only match the filename. False positives are much better than + // missing updates, as all that would happen is we reload more + // resources than we need. We do this because many resources only + // use relative paths. + const parts = fileURI.split("/"); + const file = parts[parts.length - 1]; + + // Scan every single rule in the entire page for any reference to + // this resource, and re-insert the rule to force it to update. + for (let sheet of document.styleSheets) { + _replaceResourceInSheet(sheet, file, randomKey); + } + + for (let node of document.querySelectorAll("img,image")) { + if (node.src.startsWith(fileURI)) { + node.src = fileURI + "?s=" + randomKey; + } + } +} + +function watchCSS(window) { + if (Services.prefs.getBoolPref("devtools.loader.hotreload")) { + const watcher = require("devtools/client/shared/file-watcher"); + + function onFileChanged(_, relativePath) { + if (relativePath.match(/\.css$/)) { + if (relativePath.startsWith("client/themes")) { + let path = relativePath.replace(/^client\/themes\//, ""); + + // Special-case a few files that get imported from other CSS + // files. We just manually hot reload the parent CSS file. + if (path === "variables.css" || path === "toolbars.css" || + path === "common.css" || path === "splitters.css") { + replaceCSS(window, "chrome://devtools/skin/" + getTheme() + "-theme.css"); + } else { + replaceCSS(window, "chrome://devtools/skin/" + path); + } + return; + } + + replaceCSS( + window, + "chrome://devtools/content/" + relativePath.replace(/^client\//, "") + ); + replaceCSS(window, "resource://devtools/" + relativePath); + } else if (relativePath.match(/\.(svg|png)$/)) { + relativePath = relativePath.replace(/^client\/themes\//, ""); + replaceCSSResource(window, "chrome://devtools/skin/" + relativePath); + } + } + watcher.on("file-changed", onFileChanged); + + window.addEventListener("unload", () => { + watcher.off("file-changed", onFileChanged); + }); + } +} + +module.exports = { watchCSS }; diff --git a/devtools/client/shared/file-watcher-worker.js b/devtools/client/shared/file-watcher-worker.js index 2f1c4575432c..8ec5504899cd 100644 --- a/devtools/client/shared/file-watcher-worker.js +++ b/devtools/client/shared/file-watcher-worker.js @@ -9,6 +9,17 @@ importScripts("resource://gre/modules/osfile.jsm"); const modifiedTimes = new Map(); +function findSourceDir(path) { + if (path === "" || path === "/") { + return null; + } else if (OS.File.exists( + OS.Path.join(path, "devtools/client/shared/file-watcher.js") + )) { + return path; + } + return findSourceDir(OS.Path.dirname(path)); +} + function gatherFiles(path, fileRegex) { let files = []; const iterator = new OS.File.DirectoryIterator(path); @@ -60,19 +71,44 @@ function scanFiles(files, onChangedFile) { onmessage = function(event) { const { path, fileRegex } = event.data; - let info = OS.File.stat(path); + const devtoolsPath = event.data.devtoolsPath.replace(/\/$/, ""); + + // We need to figure out a src dir to watch. These are the actual + // files the user is working with, not the files in the obj dir. We + // do this by walking up the filesystem and looking for the devtools + // directories, and falling back to the raw path. This means none of + // this will work for users who store their obj dirs outside of the + // src dir. + // + // We take care not to mess with the `devtoolsPath` if that's what + // we end up using, because it might be intentionally mapped to a + // specific place on the filesystem for loading devtools externally. + // + // `devtoolsPath` is currently the devtools directory inside of the + // obj dir, and we search for `devtools/client`, so go up 2 levels + // to skip that devtools dir and start searching for the src dir. + const searchPoint = OS.Path.dirname(OS.Path.dirname(devtoolsPath)); + const srcPath = findSourceDir(searchPoint); + const rootPath = srcPath ? OS.Path.join(srcPath, "devtools") : devtoolsPath; + const watchPath = OS.Path.join(rootPath, path.replace(/^devtools\//, "")); + + const info = OS.File.stat(watchPath); if (!info.isDir) { - throw new Error("watcher expects a directory as root path"); + throw new Error("Watcher expects a directory as root path"); } // We get a list of all the files upfront, which means we don't // support adding new files. But you need to rebuild Firefox when // adding a new file anyway. - const files = gatherFiles(path, fileRegex || /.*/); + const files = gatherFiles(watchPath, fileRegex || /.*/); // Every second, scan for file changes by stat-ing each of them and // comparing modification time. setInterval(() => { - scanFiles(files, changedFile => postMessage(changedFile)); + scanFiles(files, changedFile => { + postMessage({ fullPath: changedFile, + relativePath: changedFile.replace(rootPath + "/", "") }); + }); }, 1000); }; + diff --git a/devtools/client/shared/file-watcher.js b/devtools/client/shared/file-watcher.js index f423a64fe6de..d74ca6e4be34 100644 --- a/devtools/client/shared/file-watcher.js +++ b/devtools/client/shared/file-watcher.js @@ -3,16 +3,17 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ "use strict"; -const { Ci, ChromeWorker } = require("chrome"); +const { Ci, Cu, ChromeWorker } = require("chrome"); const { Services } = require("resource://gre/modules/Services.jsm"); const EventEmitter = require("devtools/shared/event-emitter"); const HOTRELOAD_PREF = "devtools.loader.hotreload"; -function resolveResourceURI(uri) { +function resolveResourcePath(uri) { const handler = Services.io.getProtocolHandler("resource") .QueryInterface(Ci.nsIResProtocolHandler); - return handler.resolveURI(Services.io.newURI(uri, null, null)); + const resolved = handler.resolveURI(Services.io.newURI(uri, null, null)); + return resolved.replace(/file:\/\//, ""); } function watchFiles(path, onFileChanged) { @@ -20,16 +21,6 @@ function watchFiles(path, onFileChanged) { throw new Error("`watchFiles` expects a devtools path"); } - // We need to figure out a local path to watch. We start with - // whatever devtools points to. - let resolvedRootURI = resolveResourceURI("resource://devtools"); - if (resolvedRootURI.match(/\/obj\-.*/)) { - // Move from the built directory to the user's local files - resolvedRootURI = resolvedRootURI.replace(/\/obj\-.*/, "") + "/devtools"; - } - resolvedRootURI = resolvedRootURI.replace(/^file:\/\//, ""); - const localURI = resolvedRootURI + "/" + path.replace(/^devtools\//, ""); - const watchWorker = new ChromeWorker( "resource://devtools/client/shared/file-watcher-worker.js" ); @@ -39,15 +30,16 @@ function watchFiles(path, onFileChanged) { // chrome). This means that this system will only work when built // files are symlinked, so that these URIs actually read from // local sources. There might be a better way to do this. - const relativePath = event.data.replace(resolvedRootURI + "/", ""); - if (relativePath.startsWith("client/themes")) { - onFileChanged(relativePath.replace("client/themes", - "chrome://devtools/skin")); - } - onFileChanged("resource://devtools/" + relativePath); + const { relativePath, fullPath } = event.data; + onFileChanged(relativePath, fullPath); }; - watchWorker.postMessage({ path: localURI, fileRegex: /\.(js|css)$/ }); + watchWorker.postMessage({ + path: path, + // We must do this here because we can't access the needed APIs in + // a worker. + devtoolsPath: resolveResourcePath("resource://devtools"), + fileRegex: /\.(js|css|svg|png)$/ }); return watchWorker; } @@ -56,11 +48,10 @@ EventEmitter.decorate(module.exports); let watchWorker; function onPrefChange() { if (Services.prefs.getBoolPref(HOTRELOAD_PREF) && !watchWorker) { - watchWorker = watchFiles("devtools/client", changedFile => { - module.exports.emit("file-changed", changedFile); + watchWorker = watchFiles("devtools/client", (relativePath, fullPath) => { + module.exports.emit("file-changed", relativePath, fullPath); }); - } - else if(watchWorker) { + } else if (watchWorker) { watchWorker.terminate(); watchWorker = null; } diff --git a/devtools/client/shared/moz.build b/devtools/client/shared/moz.build index 9679b644bb71..d6cd3f87bc50 100644 --- a/devtools/client/shared/moz.build +++ b/devtools/client/shared/moz.build @@ -19,6 +19,7 @@ DevToolsModules( 'autocomplete-popup.js', 'browser-loader.js', 'css-parsing-utils.js', + 'css-reload.js', 'Curl.jsm', 'demangle.js', 'developer-toolbar.js', diff --git a/devtools/client/shared/theme-switching.js b/devtools/client/shared/theme-switching.js index c076f8734929..2cd3d05f0d11 100644 --- a/devtools/client/shared/theme-switching.js +++ b/devtools/client/shared/theme-switching.js @@ -159,9 +159,10 @@ const { classes: Cc, interfaces: Ci, utils: Cu } = Components; Cu.import("resource://gre/modules/Services.jsm"); - const {require} = Components.utils.import("resource://devtools/shared/Loader.jsm", {}); - const {gDevTools} = require("devtools/client/framework/devtools"); + const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); + const { gDevTools } = require("devtools/client/framework/devtools"); const StylesheetUtils = require("sdk/stylesheet/utils"); + const { watchCSS } = require("devtools/client/shared/css-reload"); if (documentElement.hasAttribute("force-theme")) { switchTheme(documentElement.getAttribute("force-theme")); @@ -173,4 +174,6 @@ gDevTools.off("pref-changed", handlePrefChange); }); } + + watchCSS(window); })(); From 2eda01945efe3c65667c448e94f9534a7c30d653 Mon Sep 17 00:00:00 2001 From: Kris Maglione Date: Mon, 8 Feb 2016 17:40:02 -0800 Subject: [PATCH 27/60] Bug 1213993: [webext] Support frameId/allFrames/runAt in browser.tabs.executeScript and insertCSS. r=billm MozReview-Commit-ID: FgV9vyHVjj8 --HG-- extra : rebase_source : 04582c711ef40f3afc7eeaa9e4dec2e31b63e4e0 --- browser/components/extensions/ext-tabs.js | 20 ++- .../extensions/test/browser/browser.ini | 5 +- .../browser/browser_ext_tabs_executeScript.js | 141 +++++++++++++++--- .../browser_ext_tabs_executeScript_runAt.js | 110 ++++++++++++++ .../browser/browser_ext_tabs_insertCSS.js | 52 +++---- .../test/browser/file_iframe_document.html | 10 ++ .../test/browser/file_iframe_document.sjs | 40 +++++ .../extensions/ExtensionContent.jsm | 141 ++++++++++++------ toolkit/components/extensions/Schemas.jsm | 2 +- .../extensions/schemas/extension_types.json | 6 + .../modules/addons/WebNavigationFrames.jsm | 46 ++++-- 11 files changed, 458 insertions(+), 115 deletions(-) create mode 100644 browser/components/extensions/test/browser/browser_ext_tabs_executeScript_runAt.js create mode 100644 browser/components/extensions/test/browser/file_iframe_document.html create mode 100644 browser/components/extensions/test/browser/file_iframe_document.sjs diff --git a/browser/components/extensions/ext-tabs.js b/browser/components/extensions/ext-tabs.js index 0974dfb7f518..233371bc9441 100644 --- a/browser/components/extensions/ext-tabs.js +++ b/browser/components/extensions/ext-tabs.js @@ -643,7 +643,7 @@ extensions.registerSchemaAPI("tabs", null, (extension, context) => { message, recipient); }, - _execute: function(tabId, details, kind) { + _execute: function(tabId, details, kind, method) { let tab = tabId !== null ? TabManager.getTab(tabId) : TabManager.activeTab; let mm = tab.linkedBrowser.messageManager; @@ -652,6 +652,15 @@ extensions.registerSchemaAPI("tabs", null, (extension, context) => { css: [], }; + // We require a `code` or a `file` property, but we can't accept both. + if ((details.code === null) == (details.file === null)) { + return Promise.reject({message: `${method} requires either a 'code' or a 'file' property, but not both`}); + } + + if (details.frameId !== null && details.allFrames) { + return Promise.reject({message: `'frameId' and 'allFrames' are mutually exclusive`}); + } + let recipient = { innerWindowID: tab.linkedBrowser.innerWindowID, }; @@ -677,22 +686,27 @@ extensions.registerSchemaAPI("tabs", null, (extension, context) => { if (details.allFrames) { options.all_frames = details.allFrames; } + if (details.frameId !== null) { + options.frame_id = details.frameId; + } if (details.matchAboutBlank) { options.match_about_blank = details.matchAboutBlank; } if (details.runAt !== null) { options.run_at = details.runAt; + } else { + options.run_at = "document_idle"; } return context.sendMessage(mm, "Extension:Execute", {options}, recipient); }, executeScript: function(tabId, details) { - return self.tabs._execute(tabId, details, "js"); + return self.tabs._execute(tabId, details, "js", "executeScript"); }, insertCSS: function(tabId, details) { - return self.tabs._execute(tabId, details, "css"); + return self.tabs._execute(tabId, details, "css", "insertCSS"); }, connect: function(tabId, connectInfo) { diff --git a/browser/components/extensions/test/browser/browser.ini b/browser/components/extensions/test/browser/browser.ini index 9360d8fc2df6..216ce61f349b 100644 --- a/browser/components/extensions/test/browser/browser.ini +++ b/browser/components/extensions/test/browser/browser.ini @@ -7,6 +7,8 @@ support-files = context_tabs_onUpdated_iframe.html file_popup_api_injection_a.html file_popup_api_injection_b.html + file_iframe_document.html + file_iframe_document.sjs [browser_ext_simple.js] [browser_ext_commands.js] @@ -29,6 +31,7 @@ support-files = [browser_ext_tabs_executeScript.js] [browser_ext_tabs_executeScript_good.js] [browser_ext_tabs_executeScript_bad.js] +[browser_ext_tabs_executeScript_runAt.js] [browser_ext_tabs_insertCSS.js] [browser_ext_tabs_query.js] [browser_ext_tabs_getCurrent.js] @@ -45,4 +48,4 @@ support-files = [browser_ext_windows_update.js] [browser_ext_contentscript_connect.js] [browser_ext_tab_runtimeConnect.js] -[browser_ext_webNavigation_getFrames.js] \ No newline at end of file +[browser_ext_webNavigation_getFrames.js] diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_executeScript.js b/browser/components/extensions/test/browser/browser_ext_tabs_executeScript.js index 897a62ae23e4..85213ac2c8bb 100644 --- a/browser/components/extensions/test/browser/browser_ext_tabs_executeScript.js +++ b/browser/components/extensions/test/browser/browser_ext_tabs_executeScript.js @@ -8,33 +8,134 @@ add_task(function* testExecuteScript() { let messageManagersSize = MessageChannel.messageManagers.size; let responseManagersSize = MessageChannel.responseManagers.size; - let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, "http://mochi.test:8888/", true); + const BASE = "http://mochi.test:8888/browser/browser/components/extensions/test/browser/"; + const URL = BASE + "file_iframe_document.html"; + let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, URL, true); function background() { - browser.tabs.executeScript({ - file: "script.js", - code: "42", - }, result => { - browser.test.assertEq(42, result, "Expected callback result"); - browser.test.sendMessage("got result", result); - }); + browser.tabs.query({active: true, currentWindow: true}).then(tabs => { + return browser.webNavigation.getAllFrames({tabId: tabs[0].id}); + }).then(frames => { + browser.test.log(`FRAMES: ${frames[1].frameId} ${JSON.stringify(frames)}\n`); + return Promise.all([ + browser.tabs.executeScript({ + code: "42", + }).then(result => { + browser.test.assertEq(42, result, "Expected callback result"); + }), - browser.tabs.executeScript({ - file: "script2.js", - }, result => { - browser.test.assertEq(27, result, "Expected callback result"); - browser.test.sendMessage("got callback", result); - }); + browser.tabs.executeScript({ + file: "script.js", + code: "42", + }).then(result => { + browser.test.fail("Expected not to be able to execute a script with both file and code"); + }, error => { + browser.test.assertTrue(/a 'code' or a 'file' property, but not both/.test(error.message), + "Got expected error"); + }), - browser.runtime.onMessage.addListener(message => { - browser.test.assertEq("script ran", message, "Expected runtime message"); - browser.test.sendMessage("got message", message); + browser.tabs.executeScript({ + file: "script.js", + }).then(result => { + browser.test.assertEq(undefined, result, "Expected callback result"); + }), + + browser.tabs.executeScript({ + file: "script2.js", + }).then(result => { + browser.test.assertEq(27, result, "Expected callback result"); + }), + + browser.tabs.executeScript({ + code: "location.href;", + allFrames: true, + }).then(result => { + browser.test.assertTrue(Array.isArray(result), "Result is an array"); + + browser.test.assertEq(2, result.length, "Result has correct length"); + + browser.test.assertTrue(/\/file_iframe_document\.html$/.test(result[0]), "First result is correct"); + browser.test.assertEq("http://mochi.test:8888/", result[1], "Second result is correct"); + }), + + browser.tabs.executeScript({ + code: "location.href;", + runAt: "document_end", + }).then(result => { + browser.test.assertTrue(typeof(result) == "string", "Result is a string"); + + browser.test.assertTrue(/\/file_iframe_document\.html$/.test(result), "Result is correct"); + }), + + browser.tabs.executeScript({ + code: "window", + }).then(result => { + browser.test.fail("Expected error when returning non-structured-clonable object"); + }, error => { + browser.test.assertEq("Script returned non-structured-clonable data", + error.message, "Got expected error"); + }), + + browser.tabs.executeScript({ + code: "Promise.resolve(window)", + }).then(result => { + browser.test.fail("Expected error when returning non-structured-clonable object"); + }, error => { + browser.test.assertEq("Script returned non-structured-clonable data", + error.message, "Got expected error"); + }), + + browser.tabs.executeScript({ + code: "Promise.resolve(42)", + }).then(result => { + browser.test.assertEq(42, result, "Got expected promise resolution value as result"); + }), + + browser.tabs.executeScript({ + code: "location.href;", + runAt: "document_end", + allFrames: true, + }).then(result => { + browser.test.assertTrue(Array.isArray(result), "Result is an array"); + + browser.test.assertEq(2, result.length, "Result has correct length"); + + browser.test.assertTrue(/\/file_iframe_document\.html$/.test(result[0]), "First result is correct"); + browser.test.assertEq("http://mochi.test:8888/", result[1], "Second result is correct"); + }), + + browser.tabs.executeScript({ + code: "location.href;", + frameId: frames[0].frameId, + }).then(result => { + browser.test.assertTrue(/\/file_iframe_document\.html$/.test(result), `Result for frameId[0] is correct: ${result}`); + }), + + browser.tabs.executeScript({ + code: "location.href;", + frameId: frames[1].frameId, + }).then(result => { + browser.test.assertEq("http://mochi.test:8888/", result, "Result for frameId[1] is correct"); + }), + + new Promise(resolve => { + browser.runtime.onMessage.addListener(message => { + browser.test.assertEq("script ran", message, "Expected runtime message"); + resolve(); + }); + }), + ]); + }).then(() => { + browser.test.notifyPass("executeScript"); + }).catch(e => { + browser.test.fail(`Error: ${e} :: ${e.stack}`); + browser.test.notifyFail("executeScript"); }); } let extension = ExtensionTestUtils.loadExtension({ manifest: { - "permissions": ["http://mochi.test/"], + "permissions": ["http://mochi.test/", "webNavigation"], }, background, @@ -50,9 +151,7 @@ add_task(function* testExecuteScript() { yield extension.startup(); - yield extension.awaitMessage("got result"); - yield extension.awaitMessage("got callback"); - yield extension.awaitMessage("got message"); + yield extension.awaitFinish("executeScript"); yield extension.unload(); diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_runAt.js b/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_runAt.js new file mode 100644 index 000000000000..1c37d70f580e --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_runAt.js @@ -0,0 +1,110 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +/** + * These tests ensure that the runAt argument to tabs.executeScript delays + * script execution until the document has reached the correct state. + * + * Since tests of this nature are especially race-prone, it relies on a + * server-JS script to delay the completion of our test page's load cycle long + * enough for us to attempt to load our scripts in the earlies phase we support. + * + * And since we can't actually rely on that timing, it retries any attempts that + * fail to load as early as expected, but don't load at any illegal time. + */ + +add_task(function* testExecuteScript() { + let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank", true); + + function background() { + let tab; + + const BASE = "http://mochi.test:8888/browser/browser/components/extensions/test/browser/"; + const URL = BASE + "file_iframe_document.sjs"; + + const MAX_TRIES = 10; + let tries = 0; + + function again() { + if (tries++ == MAX_TRIES) { + return Promise.reject(new Error("Max tries exceeded")); + } + + let loadingPromise = new Promise(resolve => { + browser.tabs.onUpdated.addListener(function listener(tabId, changed, tab_) { + if (tabId == tab.id && changed.status == "loading" && tab_.url == URL) { + browser.tabs.onUpdated.removeListener(listener); + resolve(); + } + }); + }); + + // TODO: Test allFrames and frameId. + + return browser.tabs.update({url: URL}).then(() => { + return loadingPromise; + }).then(() => { + return Promise.all([ + // Send the executeScript requests in the reverse order that we expect + // them to execute in, to avoid them passing only because of timing + // races. + browser.tabs.executeScript({ + code: "document.readyState", + runAt: "document_idle", + }), + browser.tabs.executeScript({ + code: "document.readyState", + runAt: "document_end", + }), + browser.tabs.executeScript({ + code: "document.readyState", + runAt: "document_start", + }), + ].reverse()); + }).then(states => { + browser.test.log(`Got states: ${states}`); + + // Make sure that none of our scripts executed earlier than expected, + // regardless of retries. + browser.test.assertTrue(states[1] == "interactive" || states[1] == "complete", + `document_end state is valid: ${states[1]}`); + browser.test.assertTrue(states[2] == "complete", + `document_idle state is valid: ${states[2]}`); + + // If we have the earliest valid states for each script, we're done. + // Otherwise, try again. + if (states[0] != "loading" || states[1] != "interactive" || states[2] != "complete") { + return again(); + } + }); + } + + browser.tabs.query({active: true, currentWindow: true}).then(tabs => { + tab = tabs[0]; + + return again(); + }).then(() => { + browser.test.notifyPass("executeScript-runAt"); + }).catch(e => { + browser.test.fail(`Error: ${e} :: ${e.stack}`); + browser.test.notifyFail("executeScript-runAt"); + }); + } + + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + "permissions": ["http://mochi.test/", "tabs"], + }, + + background, + }); + + yield extension.startup(); + + yield extension.awaitFinish("executeScript-runAt"); + + yield extension.unload(); + + yield BrowserTestUtils.removeTab(tab); +}); diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_insertCSS.js b/browser/components/extensions/test/browser/browser_ext_tabs_insertCSS.js index 5fd52f743687..20123f45d1a6 100644 --- a/browser/components/extensions/test/browser/browser_ext_tabs_insertCSS.js +++ b/browser/components/extensions/test/browser/browser_ext_tabs_insertCSS.js @@ -13,39 +13,20 @@ add_task(function* testExecuteScript() { function background() { let promises = [ { - background: "rgb(0, 0, 0)", - foreground: "rgb(255, 192, 203)", - promise: resolve => { - browser.tabs.insertCSS({ - file: "file1.css", - code: "* { background: black }", - }, result => { - browser.test.assertEq(undefined, result, "Expected callback result"); - resolve(); - }); - }, - }, - { - background: "rgb(0, 0, 0)", + background: "transparent", foreground: "rgb(0, 113, 4)", - promise: resolve => { - browser.tabs.insertCSS({ + promise: () => { + return browser.tabs.insertCSS({ file: "file2.css", - }, result => { - browser.test.assertEq(undefined, result, "Expected callback result"); - resolve(); }); }, }, { background: "rgb(42, 42, 42)", foreground: "rgb(0, 113, 4)", - promise: resolve => { - browser.tabs.insertCSS({ + promise: () => { + return browser.tabs.insertCSS({ code: "* { background: rgb(42, 42, 42) }", - }, result => { - browser.test.assertEq(undefined, result, "Expected callback result"); - resolve(); }); }, }, @@ -58,23 +39,29 @@ add_task(function* testExecuteScript() { function next() { if (!promises.length) { - browser.test.notifyPass("insertCSS"); return; } let {promise, background, foreground} = promises.shift(); - new Promise(promise).then(() => { - browser.tabs.executeScript({ + return promise().then(result => { + browser.test.assertEq(undefined, result, "Expected callback result"); + + return browser.tabs.executeScript({ code: `(${checkCSS})()`, - }, result => { - browser.test.assertEq(background, result[0], "Expected background color"); - browser.test.assertEq(foreground, result[1], "Expected foreground color"); - next(); }); + }).then(result => { + browser.test.assertEq(background, result[0], "Expected background color"); + browser.test.assertEq(foreground, result[1], "Expected foreground color"); + return next(); }); } - next(); + next().then(() => { + browser.test.notifyPass("insertCSS"); + }).catch(e => { + browser.test.fail(`Error: ${e} :: ${e.stack}`); + browser.test.notifyFailure("insertCSS"); + }); } let extension = ExtensionTestUtils.loadExtension({ @@ -85,7 +72,6 @@ add_task(function* testExecuteScript() { background, files: { - "file1.css": "* { color: pink }", "file2.css": "* { color: rgb(0, 113, 4) }", }, }); diff --git a/browser/components/extensions/test/browser/file_iframe_document.html b/browser/components/extensions/test/browser/file_iframe_document.html new file mode 100644 index 000000000000..fcadccf02884 --- /dev/null +++ b/browser/components/extensions/test/browser/file_iframe_document.html @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/browser/components/extensions/test/browser/file_iframe_document.sjs b/browser/components/extensions/test/browser/file_iframe_document.sjs new file mode 100644 index 000000000000..17b783f5cc9e --- /dev/null +++ b/browser/components/extensions/test/browser/file_iframe_document.sjs @@ -0,0 +1,40 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80 ft=javascript: */ +"use strict"; + +// This script slows the load of an HTML document so that we can reliably test +// all phases of the load cycle supported by the extension API. + +/* eslint-disable no-unused-vars */ + +const DELAY = 1 * 1000; // Delay one second before completing the request. + +const Ci = Components.interfaces; + +let nsTimer = Components.Constructor("@mozilla.org/timer;1", "nsITimer", "initWithCallback"); + +let timer; + +function handleRequest(request, response) { + response.processAsync(); + + response.setHeader("Content-Type", "text/html", false); + response.write(` + + + + + + + `); + + // Note: We need to store a reference to the timer to prevent it from being + // canceled when it's GCed. + timer = new nsTimer(() => { + response.write(` + + + `); + response.finish(); + }, DELAY, Ci.nsITimer.TYPE_ONE_SHOT); +} diff --git a/toolkit/components/extensions/ExtensionContent.jsm b/toolkit/components/extensions/ExtensionContent.jsm index dacbf94cfabf..f755746c5840 100644 --- a/toolkit/components/extensions/ExtensionContent.jsm +++ b/toolkit/components/extensions/ExtensionContent.jsm @@ -166,7 +166,11 @@ Script.prototype = { return false; } - if (!this.options.all_frames && window.top != window) { + if (this.options.frame_id != null) { + if (WebNavigationFrames.getFrameId(window) != this.options.frame_id) { + return false; + } + } else if (!this.options.all_frames && window.top != window) { return false; } @@ -177,7 +181,7 @@ Script.prototype = { tryInject(extension, window, sandbox, shouldRun) { if (!this.matches(window)) { - this.deferred.reject(); + this.deferred.reject({message: "No matching window"}); return; } @@ -188,11 +192,13 @@ Script.prototype = { for (let url of this.css) { url = extension.baseURI.resolve(url); runSafeSyncWithoutClone(winUtils.loadSheetUsingURIString, url, winUtils.AUTHOR_SHEET); + this.deferred.resolve(); } if (this.options.cssCode) { let url = "data:text/css;charset=utf-8," + encodeURIComponent(this.options.cssCode); runSafeSyncWithoutClone(winUtils.loadSheetUsingURIString, url, winUtils.AUTHOR_SHEET); + this.deferred.resolve(); } } @@ -218,7 +224,7 @@ Script.prototype = { result = Services.scriptloader.loadSubScriptWithOptions(url, options); } catch (e) { Cu.reportError(e); - this.deferred.reject(e.message); + this.deferred.reject(e); } } @@ -227,13 +233,12 @@ Script.prototype = { result = Cu.evalInSandbox(this.options.jsCode, sandbox, "latest"); } catch (e) { Cu.reportError(e); - this.deferred.reject(e.message); + this.deferred.reject(e); } } - } - // TODO: Handle this correctly when we support runAt and allFrames. - this.deferred.resolve(result); + this.deferred.resolve(result); + } }, }; @@ -249,6 +254,7 @@ function getWindowMessageManager(contentWindow) { } } +var DocumentManager; var ExtensionManager; // Scope in which extension content script code can run. It uses @@ -265,12 +271,11 @@ class ExtensionContext extends BaseContext { this.extensionId = extensionId; this.contentWindow = contentWindow; - let utils = contentWindow.QueryInterface(Ci.nsIInterfaceRequestor) - .getInterface(Ci.nsIDOMWindowUtils); - let outerWindowId = utils.outerWindowID; - let frameId = contentWindow == contentWindow.top ? 0 : outerWindowId; + let frameId = WebNavigationFrames.getFrameId(contentWindow); this.frameId = frameId; + this.scripts = []; + let mm = getWindowMessageManager(contentWindow); this.messageManager = mm; @@ -349,6 +354,27 @@ class ExtensionContext extends BaseContext { script.tryInject(this.extension, this.contentWindow, this.sandbox, shouldRun); } + addScript(script) { + let state = DocumentManager.getWindowState(this.contentWindow); + this.execute(script, scheduled => isWhenBeforeOrSame(scheduled, state)); + + // Save the script in case it has pending operations in later load + // states, but only if we're before document_idle. + if (state != "document_idle") { + this.scripts.push(script); + } + } + + triggerScripts(documentState) { + for (let script of this.scripts) { + this.execute(script, scheduled => scheduled == documentState); + } + if (documentState == "document_idle") { + // Don't bother saving scripts after document_idle. + this.scripts.length = 0; + } + } + close() { super.unload(); @@ -372,7 +398,7 @@ function windowId(window) { // Responsible for creating ExtensionContexts and injecting content // scripts into them when new documents are created. -var DocumentManager = { +DocumentManager = { extensionCount: 0, // Map[windowId -> Map[extensionId -> ExtensionContext]] @@ -393,12 +419,12 @@ var DocumentManager = { getWindowState(contentWindow) { let readyState = contentWindow.document.readyState; - if (readyState == "loading") { - return "document_start"; + if (readyState == "complete") { + return "document_idle"; } else if (readyState == "interactive") { return "document_end"; } else { - return "document_idle"; + return "document_start"; } }, @@ -475,25 +501,38 @@ var DocumentManager = { } }, - executeScript(global, extensionId, script) { - let window = global.content; - let context = this.getContentScriptContext(extensionId, window); - if (!context) { - throw new Error("Unexpected add-on ID"); + executeScript(global, extensionId, options) { + let executeInWin = (window) => { + let deferred = PromiseUtils.defer(); + let script = new Script(options, deferred); + + if (script.matches(window)) { + let context = this.getContentScriptContext(extensionId, window); + context.addScript(script); + return deferred.promise; + } + return null; + }; + + let promises = Array.from(this.enumerateWindows(global.docShell), executeInWin) + .filter(promise => promise); + + if (!promises.length) { + return Promise.reject({message: `No matching window`}); } - - // TODO: Somehow make sure we have the right permissions for this origin! - - // FIXME: Script should be executed only if current state has - // already reached its run_at state, or we have to keep it around - // somewhere to execute later. - context.execute(script, scheduled => true); + if (options.all_frames) { + return Promise.all(promises); + } + if (promises.length > 1) { + return Promise.reject({message: `Internal error: Script matched multiple windows`}); + } + return promises[0]; }, enumerateWindows: function*(docShell) { let window = docShell.QueryInterface(Ci.nsIInterfaceRequestor) .getInterface(Ci.nsIDOMWindow); - yield [window, this.getWindowState(window)]; + yield window; for (let i = 0; i < docShell.childCount; i++) { let child = docShell.getChildAt(i).QueryInterface(Ci.nsIDocShell); @@ -539,11 +578,11 @@ var DocumentManager = { // Note that we miss windows in the bfcache here. In theory we // could execute content scripts on a pageshow event for that // window, but that seems extreme. - for (let [window, state] of this.enumerateWindows(global.docShell)) { + for (let window of this.enumerateWindows(global.docShell)) { for (let script of extension.scripts) { if (script.matches(window)) { let context = this.getContentScriptContext(extensionId, window); - context.execute(script, scheduled => isWhenBeforeOrSame(scheduled, state)); + context.addScript(script); } } } @@ -578,13 +617,21 @@ var DocumentManager = { trigger(when, window) { let state = this.getWindowState(window); - for (let [extensionId, extension] of ExtensionManager.extensions) { - for (let script of extension.scripts) { - if (script.matches(window)) { - let context = this.getContentScriptContext(extensionId, window); - context.execute(script, scheduled => scheduled == state); + + if (state == "document_start") { + for (let [extensionId, extension] of ExtensionManager.extensions) { + for (let script of extension.scripts) { + if (script.matches(window)) { + let context = this.getContentScriptContext(extensionId, window); + context.addScript(script); + } } } + } else { + let contexts = this.contentScriptWindows.get(windowId(window)) || new Map(); + for (let context of contexts.values()) { + context.triggerScripts(state); + } } }, }; @@ -705,10 +752,7 @@ class ExtensionGlobal { get messageFilter() { return { - innerWindowID: this.global.content - .QueryInterface(Ci.nsIInterfaceRequestor) - .getInterface(Ci.nsIDOMWindowUtils) - .currentInnerWindowID, + innerWindowID: windowId(this.global.content), }; } @@ -717,7 +761,7 @@ class ExtensionGlobal { case "Extension:Capture": return this.handleExtensionCapture(data.width, data.height, data.options); case "Extension:Execute": - return this.handleExtensionExecute(target, recipient, data.options); + return this.handleExtensionExecute(target, recipient.extensionId, data.options); case "WebNavigation:GetFrame": return this.handleWebNavigationGetFrame(data.options); case "WebNavigation:GetAllFrames": @@ -746,12 +790,17 @@ class ExtensionGlobal { return canvas.toDataURL(`image/${options.format}`, options.quality / 100); } - handleExtensionExecute(target, recipient, options) { - let deferred = PromiseUtils.defer(); - let script = new Script(options, deferred); - let {extensionId} = recipient; - DocumentManager.executeScript(target, extensionId, script); - return deferred.promise; + handleExtensionExecute(target, extensionId, options) { + return DocumentManager.executeScript(target, extensionId, options).then(result => { + try { + // Make sure we can structured-clone the result value before + // we try to send it back over the message manager. + Cu.cloneInto(result, target); + } catch (e) { + return Promise.reject({message: "Script returned non-structured-clonable data"}); + } + return result; + }); } handleWebNavigationGetFrame({frameId}) { diff --git a/toolkit/components/extensions/Schemas.jsm b/toolkit/components/extensions/Schemas.jsm index d680ec6fe446..994d6d658e78 100644 --- a/toolkit/components/extensions/Schemas.jsm +++ b/toolkit/components/extensions/Schemas.jsm @@ -665,7 +665,7 @@ class IntegerType extends Type { } // Ensure it's between -2**31 and 2**31-1 - if ((value | 0) !== value) { + if (!Number.isSafeInteger(value)) { return context.error("Integer is out of range"); } diff --git a/toolkit/components/extensions/schemas/extension_types.json b/toolkit/components/extensions/schemas/extension_types.json index dd01ad4d4445..53fc5cd4d769 100644 --- a/toolkit/components/extensions/schemas/extension_types.json +++ b/toolkit/components/extensions/schemas/extension_types.json @@ -47,6 +47,12 @@ "file": {"type": "string", "optional": true, "description": "JavaScript or CSS file to inject."}, "allFrames": {"type": "boolean", "optional": true, "description": "If allFrames is true, implies that the JavaScript or CSS should be injected into all frames of current page. By default, it's false and is only injected into the top frame."}, "matchAboutBlank": {"type": "boolean", "optional": true, "description": "If matchAboutBlank is true, then the code is also injected in about:blank and about:srcdoc frames if your extension has access to its parent document. Code cannot be inserted in top-level about:-frames. By default it is false."}, + "frameId": { + "type": "integer", + "minimum": 0, + "optional": true, + "description": "The ID of the frame to inject the script into. This may not be used in combination with allFrames." + }, "runAt": { "$ref": "RunAt", "optional": true, diff --git a/toolkit/modules/addons/WebNavigationFrames.jsm b/toolkit/modules/addons/WebNavigationFrames.jsm index cb404b251c9b..10d9f8b8e141 100644 --- a/toolkit/modules/addons/WebNavigationFrames.jsm +++ b/toolkit/modules/addons/WebNavigationFrames.jsm @@ -78,18 +78,40 @@ function* iterateDocShellTree(docShell) { return null; } +/** + * Returns the frame ID of the given window. If the window is the + * top-level content window, its frame ID is 0. Otherwise, its frame ID + * is its outer window ID. + * + * @param {Window} window - The window to retrieve the frame ID for. + * @returns {number} + */ +function getFrameId(window) { + let docShell = window.QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIDocShell); + + if (!docShell.sameTypeParent) { + return 0; + } + + let utils = window.getInterface(Ci.nsIDOMWindowUtils); + return utils.outerWindowID; +} + /** * Search for a frame starting from the passed root docShell and * convert it to its related frame detail representation. * - * @param {number} windowId - the windowId of the frame to retrieve + * @param {number} frameId - the frame ID of the frame to retrieve, as + * described in getFrameId. * @param {nsIDocShell} docShell - the root docShell object - * @return {FrameDetail} the FrameDetail JSON object which represents the docShell. + * @return {nsIDocShell?} the docShell with the given frameId, or null + * if no match. */ -function findFrame(windowId, rootDocShell) { +function findDocShell(frameId, rootDocShell) { for (let docShell of iterateDocShellTree(rootDocShell)) { - if (windowId == getWindowId(docShellToWindow(docShell))) { - return convertDocShellToFrameDetail(docShell); + if (frameId == getFrameId(docShellToWindow(docShell))) { + return docShell; } } @@ -99,14 +121,18 @@ function findFrame(windowId, rootDocShell) { var WebNavigationFrames = { iterateDocShellTree, - getFrame(docShell, frameId) { - if (frameId == 0) { - return convertDocShellToFrameDetail(docShell); - } + findDocShell, - return findFrame(frameId, docShell); + getFrame(docShell, frameId) { + let result = findDocShell(frameId, docShell); + if (result) { + return convertDocShellToFrameDetail(result); + } + return null; }, + getFrameId, + getAllFrames(docShell) { return Array.from(iterateDocShellTree(docShell), convertDocShellToFrameDetail); }, From ecb44c4c0ce8d023796a2356100f0af1691018cb Mon Sep 17 00:00:00 2001 From: Michael Kaply Date: Fri, 26 Feb 2016 14:47:53 -0600 Subject: [PATCH 28/60] Bug 1249742 - Don't set prefs at all if overridden by lang or locale; r=mixedpuppy --- browser/components/distribution.js | 44 +++++++++++++------ .../components/tests/unit/distribution.ini | 15 ++++--- .../tests/unit/test_distribution.js | 15 ++++--- 3 files changed, 48 insertions(+), 26 deletions(-) diff --git a/browser/components/distribution.js b/browser/components/distribution.js index cf073a9c37ca..0ae2ed09270c 100644 --- a/browser/components/distribution.js +++ b/browser/components/distribution.js @@ -377,34 +377,50 @@ DistributionCustomizer.prototype = { let localizedStr = Cc["@mozilla.org/pref-localizedstring;1"]. createInstance(Ci.nsIPrefLocalizedString); - if (sections["LocalizablePreferences"]) { - for (let key of enumerate(this._ini.getKeys("LocalizablePreferences"))) { + var usedLocalizablePreferences = []; + + if (sections["LocalizablePreferences-" + this._locale]) { + for (let key of enumerate(this._ini.getKeys("LocalizablePreferences-" + this._locale))) { try { - let value = eval(this._ini.getString("LocalizablePreferences", key)); - value = value.replace(/%LOCALE%/g, this._locale); - value = value.replace(/%LANGUAGE%/g, this._language); - localizedStr.data = "data:text/plain," + key + "=" + value; - defaults.setComplexValue(key, Ci.nsIPrefLocalizedString, localizedStr); + let value = eval(this._ini.getString("LocalizablePreferences-" + this._locale, key)); + if (value !== undefined) { + localizedStr.data = "data:text/plain," + key + "=" + value; + defaults.setComplexValue(key, Ci.nsIPrefLocalizedString, localizedStr); + } + usedLocalizablePreferences.push(key); } catch (e) { /* ignore bad prefs and move on */ } } } if (sections["LocalizablePreferences-" + this._language]) { for (let key of enumerate(this._ini.getKeys("LocalizablePreferences-" + this._language))) { + if (usedLocalizablePreferences.indexOf(key) > -1) { + continue; + } try { let value = eval(this._ini.getString("LocalizablePreferences-" + this._language, key)); - localizedStr.data = "data:text/plain," + key + "=" + value; - defaults.setComplexValue(key, Ci.nsIPrefLocalizedString, localizedStr); + if (value !== undefined) { + localizedStr.data = "data:text/plain," + key + "=" + value; + defaults.setComplexValue(key, Ci.nsIPrefLocalizedString, localizedStr); + } + usedLocalizablePreferences.push(key); } catch (e) { /* ignore bad prefs and move on */ } } } - if (sections["LocalizablePreferences-" + this._locale]) { - for (let key of enumerate(this._ini.getKeys("LocalizablePreferences-" + this._locale))) { + if (sections["LocalizablePreferences"]) { + for (let key of enumerate(this._ini.getKeys("LocalizablePreferences"))) { + if (usedLocalizablePreferences.indexOf(key) > -1) { + continue; + } try { - let value = eval(this._ini.getString("LocalizablePreferences-" + this._locale, key)); - localizedStr.data = "data:text/plain," + key + "=" + value; - defaults.setComplexValue(key, Ci.nsIPrefLocalizedString, localizedStr); + let value = eval(this._ini.getString("LocalizablePreferences", key)); + if (value !== undefined) { + value = value.replace(/%LOCALE%/g, this._locale); + value = value.replace(/%LANGUAGE%/g, this._language); + localizedStr.data = "data:text/plain," + key + "=" + value; + defaults.setComplexValue(key, Ci.nsIPrefLocalizedString, localizedStr); + } } catch (e) { /* ignore bad prefs and move on */ } } } diff --git a/browser/components/tests/unit/distribution.ini b/browser/components/tests/unit/distribution.ini index e696ae39c12b..e6576f5d62d8 100644 --- a/browser/components/tests/unit/distribution.ini +++ b/browser/components/tests/unit/distribution.ini @@ -15,18 +15,21 @@ distribution.test.bool.false=false [LocalizablePreferences] distribution.test.locale="%LOCALE%" -distribution.test.reset="Set" -distribution.test.locale.set="First Set" -distribution.test.language.set="First Set" +distribution.test.language.reset="Preference Set" +distribution.test.locale.reset="Preference Set" +distribution.test.locale.set="Preference Set" +distribution.test.language.set="Preference Set" [LocalizablePreferences-en] distribution.test.language.en="en" -distribution.test.language.set="Second Set" +distribution.test.language.reset= +distribution.test.language.set="Language Set" +distribution.test.locale.set="Language Set" [LocalizablePreferences-en-US] distribution.test.locale.en-US="en-US" -distribution.test.reset= -distribution.test.locale.set="Second Set" +distribution.test.locale.reset= +distribution.test.locale.set="Locale Set" [LocalizablePreferences-de] distribution.test.locale.de="de" diff --git a/browser/components/tests/unit/test_distribution.js b/browser/components/tests/unit/test_distribution.js index 1200b7ae4947..7427ef53e416 100644 --- a/browser/components/tests/unit/test_distribution.js +++ b/browser/components/tests/unit/test_distribution.js @@ -71,11 +71,14 @@ add_task(function* () { Assert.equal(Services.prefs.getComplexValue("distribution.test.language.en", Ci.nsIPrefLocalizedString).data, "en"); Assert.equal(Services.prefs.getComplexValue("distribution.test.locale.en-US", Ci.nsIPrefLocalizedString).data, "en-US"); Assert.throws(() => Services.prefs.getComplexValue("distribution.test.locale.de", Ci.nsIPrefLocalizedString)); + // This value was never set because of the empty language specific pref + Assert.throws(() => Services.prefs.getComplexValue("distribution.test.language.reset", Ci.nsIPrefLocalizedString)); // This value was never set because of the empty locale specific pref - // This testcase currently fails - the value is set to "undefined" - it should not be set at all (throw) - // Assert.throws(() => Services.prefs.getComplexValue("distribution.test.reset", Ci.nsIPrefLocalizedString)); - // This value was overriden by a locale specific setting - Assert.equal(Services.prefs.getComplexValue("distribution.test.locale.set", Ci.nsIPrefLocalizedString).data, "Second Set"); - // This value was overriden by a language specific setting - Assert.equal(Services.prefs.getComplexValue("distribution.test.language.set", Ci.nsIPrefLocalizedString).data, "Second Set"); + Assert.throws(() => Services.prefs.getComplexValue("distribution.test.locale.reset", Ci.nsIPrefLocalizedString)); + // This value was overridden by a locale specific setting + Assert.equal(Services.prefs.getComplexValue("distribution.test.locale.set", Ci.nsIPrefLocalizedString).data, "Locale Set"); + // This value was overridden by a language specific setting + Assert.equal(Services.prefs.getComplexValue("distribution.test.language.set", Ci.nsIPrefLocalizedString).data, "Language Set"); + // Language should not override locale + Assert.notEqual(Services.prefs.getComplexValue("distribution.test.locale.set", Ci.nsIPrefLocalizedString).data, "Language Set"); }); From 5b9b9eda7663d85ba1d0f5e216f7098b87c7be1e Mon Sep 17 00:00:00 2001 From: Tim Nguyen Date: Fri, 26 Feb 2016 21:54:09 +0100 Subject: [PATCH 29/60] Bug 1251720 - Remove Storage Inspector directory from .eslintignore. r=pbro MozReview-Commit-ID: 1J0FJcnF69v --- .eslintignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.eslintignore b/.eslintignore index 278106bef173..0bad6a8dc699 100644 --- a/.eslintignore +++ b/.eslintignore @@ -105,7 +105,6 @@ devtools/client/scratchpad/** devtools/client/shadereditor/** devtools/client/shared/** devtools/client/sourceeditor/** -devtools/client/storage/** devtools/client/tilt/** devtools/client/webaudioeditor/** devtools/client/webconsole/** From 8bab15a3c9ee10fa54fee2fe0476621e986e796a Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Tue, 23 Feb 2016 06:25:38 -0600 Subject: [PATCH 30/60] Bug 1242057 - Enable all responsive probes on release. r=gl p=bsmedberg MozReview-Commit-ID: 6J0bwym78gs --- devtools/client/responsive.html/index.js | 2 -- toolkit/components/telemetry/Histograms.json | 6 ++++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/devtools/client/responsive.html/index.js b/devtools/client/responsive.html/index.js index e1567436d576..210a6768947a 100644 --- a/devtools/client/responsive.html/index.js +++ b/devtools/client/responsive.html/index.js @@ -30,8 +30,6 @@ let bootstrap = { store: null, init() { - // TODO: Should we track this as a separate tool from the old version? - // See bug 1242057. this.telemetry.toolOpened("responsive"); let store = this.store = Store(); let app = createElement(App); diff --git a/toolkit/components/telemetry/Histograms.json b/toolkit/components/telemetry/Histograms.json index 93914fbeac1b..31756f0cbfba 100644 --- a/toolkit/components/telemetry/Histograms.json +++ b/toolkit/components/telemetry/Histograms.json @@ -7450,11 +7450,13 @@ "bug_numbers": [1214352] }, "DEVTOOLS_RESPONSIVE_TIME_ACTIVE_SECONDS": { - "expires_in_version": "never", + "expires_in_version": "55", "kind": "exponential", "high": 10000000, "n_buckets": 100, - "description": "How long has the responsive view been active (seconds)" + "bug_numbers": [1242057], + "description": "How long has the responsive view been active (seconds)", + "releaseChannelCollection": "opt-out" }, "DEVTOOLS_DEVELOPERTOOLBAR_TIME_ACTIVE_SECONDS": { "expires_in_version": "never", From 979f65c7b240b5727e176815684c0edd7c047c06 Mon Sep 17 00:00:00 2001 From: Sebastian Hengst Date: Fri, 26 Feb 2016 23:22:03 +0100 Subject: [PATCH 31/60] Bug 1251748 - Remove eslint exclusion of removed pocket directory. r=mixedpuppy MozReview-Commit-ID: HwYV5HYkGYL --- .eslintignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.eslintignore b/.eslintignore index 0bad6a8dc699..eb809110fa9c 100644 --- a/.eslintignore +++ b/.eslintignore @@ -64,7 +64,6 @@ browser/base/content/test/** browser/base/content/newtab/** browser/components/downloads/** browser/components/feeds/** -browser/components/pocket/** browser/components/preferences/** browser/components/privatebrowsing/** browser/components/sessionstore/** From b3cd983d7914f6e75ba6a3a958b3549445a0e195 Mon Sep 17 00:00:00 2001 From: Shane Caraveo Date: Fri, 26 Feb 2016 14:31:51 -0800 Subject: [PATCH 32/60] Bug 1251410 fix button height on win10, r=gijs --- browser/extensions/pocket/skin/windows/pocket.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser/extensions/pocket/skin/windows/pocket.css b/browser/extensions/pocket/skin/windows/pocket.css index afaa37e6bfe9..a1e329e7c2ad 100644 --- a/browser/extensions/pocket/skin/windows/pocket.css +++ b/browser/extensions/pocket/skin/windows/pocket.css @@ -1,7 +1,7 @@ @import url("chrome://pocket-shared/skin/pocket.css"); #nav-bar #pocket-button > .toolbarbutton-icon { - padding: 2px 6px; + padding: calc(var(--toolbarbutton-vertical-inner-padding)) 6px; } :-moz-any(#TabsToolbar, .widget-overflow-list) #pocket-button > .toolbarbutton-icon { From 0df50bbc44a76822efb1a95708070b336735d869 Mon Sep 17 00:00:00 2001 From: Andrzej Hunt Date: Fri, 26 Feb 2016 14:04:21 -0800 Subject: [PATCH 33/60] Bug 1251740 - Rename searchistory to searchHistory r=me MozReview-Commit-ID: BT0EbspbxMK --HG-- extra : rebase_source : 9796bc0e3f2b42a8497bb71830666779891426c4 --- .../base/java/org/mozilla/gecko/home/SearchEngineRow.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mobile/android/base/java/org/mozilla/gecko/home/SearchEngineRow.java b/mobile/android/base/java/org/mozilla/gecko/home/SearchEngineRow.java index 543a5b3d3aa1..e7e3b1a67d2e 100644 --- a/mobile/android/base/java/org/mozilla/gecko/home/SearchEngineRow.java +++ b/mobile/android/base/java/org/mozilla/gecko/home/SearchEngineRow.java @@ -395,9 +395,9 @@ class SearchEngineRow extends AnimatedHeightLayout { List searchHistorySuggestions = (rawSearchHistorySuggestions != null) ? rawSearchHistorySuggestions : new ArrayList(); // Filter out URLs and long search suggestions - Iterator searchistoryIterator = searchHistorySuggestions.iterator(); - while (searchistoryIterator.hasNext()) { - final String currentSearchHistory = searchistoryIterator.next(); + Iterator searchHistoryIterator = searchHistorySuggestions.iterator(); + while (searchHistoryIterator.hasNext()) { + final String currentSearchHistory = searchHistoryIterator.next(); if (currentSearchHistory.length() > 50 || Pattern.matches("^(https?|ftp|file)://.*", currentSearchHistory)) { searchHistorySuggestions.remove(currentSearchHistory); From a028a2c7c6b8ee26583cf0ebe50afe6c5adb8592 Mon Sep 17 00:00:00 2001 From: Andrzej Hunt Date: Fri, 26 Feb 2016 14:10:27 -0800 Subject: [PATCH 34/60] Bug 1251740 - Remove ArrayList item using iterator instead of from list when iterating r=sebastian Otherwise we will crash with a java.util.ConcurrentModificationException on iterator.next() after removing an item using list.remove(item). MozReview-Commit-ID: KYebSw2zjVk --HG-- extra : rebase_source : c2d43cfb94742f4c2675ab7ceca0796890646352 --- .../base/java/org/mozilla/gecko/home/SearchEngineRow.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/android/base/java/org/mozilla/gecko/home/SearchEngineRow.java b/mobile/android/base/java/org/mozilla/gecko/home/SearchEngineRow.java index e7e3b1a67d2e..17a4a2c2d9ea 100644 --- a/mobile/android/base/java/org/mozilla/gecko/home/SearchEngineRow.java +++ b/mobile/android/base/java/org/mozilla/gecko/home/SearchEngineRow.java @@ -400,7 +400,7 @@ class SearchEngineRow extends AnimatedHeightLayout { final String currentSearchHistory = searchHistoryIterator.next(); if (currentSearchHistory.length() > 50 || Pattern.matches("^(https?|ftp|file)://.*", currentSearchHistory)) { - searchHistorySuggestions.remove(currentSearchHistory); + searchHistoryIterator.remove(); } } From c1698e3ba728e367a39abe21df5dcebc09703629 Mon Sep 17 00:00:00 2001 From: Chenxia Liu Date: Fri, 12 Feb 2016 11:52:26 -0800 Subject: [PATCH 35/60] Bug 1244701 - Message EOL plan to gingerbread users. r=margaret MozReview-Commit-ID: ESJd870iP3N --HG-- extra : rebase_source : 8d4a774a5c7aa6c34fff499a5f152d025dd4f1bb --- .../base/java/org/mozilla/gecko/BrowserApp.java | 15 +++++++-------- .../base/locales/en-US/android_strings.dtd | 2 +- mobile/android/base/strings.xml.in | 4 ++-- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java index 13a3206d3aef..59a050226f07 100644 --- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java +++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java @@ -33,7 +33,6 @@ import org.mozilla.gecko.gfx.ImmutableViewportMetrics; import org.mozilla.gecko.gfx.LayerView; import org.mozilla.gecko.home.BrowserSearch; import org.mozilla.gecko.home.HomeBanner; -import org.mozilla.gecko.home.HomeConfig; import org.mozilla.gecko.home.HomeConfig.PanelType; import org.mozilla.gecko.home.HomeConfigPrefsBackend; import org.mozilla.gecko.home.HomePager; @@ -194,7 +193,7 @@ public class BrowserApp extends GeckoApp @RobocopTarget public static final String EXTRA_SKIP_STARTPANE = "skipstartpane"; - private static final String HONEYCOMB_EOL_NOTIFIED = "honeycomb_eol_notified"; + private static final String EOL_NOTIFIED = "eol_notified"; private BrowserSearch mBrowserSearch; private View mBrowserSearchContainer; @@ -798,11 +797,11 @@ public class BrowserApp extends GeckoApp allowCallback); } - private void conditionallyNotifyHCEOL() { + private void conditionallyNotifyEOL() { final StrictMode.ThreadPolicy savedPolicy = StrictMode.allowThreadDiskReads(); try { final SharedPreferences prefs = GeckoSharedPrefs.forProfile(this); - if (!prefs.getBoolean(HONEYCOMB_EOL_NOTIFIED, false)) { + if (!prefs.contains(EOL_NOTIFIED)) { // Launch main App to load SUMO url on EOL notification. final String link = getString(R.string.eol_notification_url, @@ -824,12 +823,12 @@ public class BrowserApp extends GeckoApp .build(); final NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - final int notificationID = HONEYCOMB_EOL_NOTIFIED.hashCode(); + final int notificationID = EOL_NOTIFIED.hashCode(); notificationManager.notify(notificationID, notification); GeckoSharedPrefs.forProfile(this) .edit() - .putBoolean(HONEYCOMB_EOL_NOTIFIED, true) + .putBoolean(EOL_NOTIFIED, true) .apply(); } } finally { @@ -2518,8 +2517,8 @@ public class BrowserApp extends GeckoApp onCreateOptionsMenu(mMenu); } - if (!Versions.preHC && !Versions.feature14Plus) { - conditionallyNotifyHCEOL(); + if (!Versions.feature14Plus) { + conditionallyNotifyEOL(); } } diff --git a/mobile/android/base/locales/en-US/android_strings.dtd b/mobile/android/base/locales/en-US/android_strings.dtd index 0fbd822f1ada..9b4e1eab2e2d 100644 --- a/mobile/android/base/locales/en-US/android_strings.dtd +++ b/mobile/android/base/locales/en-US/android_strings.dtd @@ -776,5 +776,5 @@ just addresses the organization to follow, e.g. "This site is run by " --> replaced by the Android OS version (e.g., 14)--> - + diff --git a/mobile/android/base/strings.xml.in b/mobile/android/base/strings.xml.in index ecf15a7b10df..e59b3fb976b7 100644 --- a/mobile/android/base/strings.xml.in +++ b/mobile/android/base/strings.xml.in @@ -607,8 +607,8 @@ &devtools_auth_scan_header; &unsupported_sdk_version; - &eol_notification_title; + &eol_notification_title2; &eol_notification_summary; - https://support.mozilla.org/1/mobile/&formatS1;/&formatS2;/&formatS3;/honeycomb + https://support.mozilla.org/1/mobile/&formatS1;/&formatS2;/&formatS3;/unsupported-version From d3b05e8c5adca5d46bfe006de588682aa940b505 Mon Sep 17 00:00:00 2001 From: Alexandre Poirot Date: Sat, 27 Feb 2016 04:51:10 -0800 Subject: [PATCH 36/60] Bug 1245530 - Use require(Services) instead of Cu.import(Services.jsm). r=jryans --- .../client/canvasdebugger/canvasdebugger.js | 2 +- devtools/client/canvasdebugger/test/head.js | 13 ++++++------- devtools/client/debugger/debugger-controller.js | 2 +- devtools/client/definitions.js | 3 +-- devtools/client/eyedropper/eyedropper.js | 3 +-- devtools/client/framework/ToolboxProcess.jsm | 2 +- devtools/client/framework/attach-thread.js | 2 +- devtools/client/framework/connect/connect.js | 2 +- devtools/client/framework/sidebar.js | 2 +- devtools/client/framework/test/shared-head.js | 2 +- devtools/client/framework/toolbox-hosts.js | 2 +- .../client/framework/toolbox-process-window.js | 2 +- devtools/client/framework/toolbox.js | 2 +- devtools/client/inspector/breadcrumbs.js | 2 +- devtools/client/inspector/computed/computed.js | 2 +- devtools/client/inspector/inspector-panel.js | 3 +-- devtools/client/inspector/markup/html-editor.js | 2 +- devtools/client/inspector/markup/markup.js | 1 - .../inspector/rules/models/element-style.js | 2 -- devtools/client/inspector/rules/rules.js | 2 +- .../inspector/shared/style-inspector-menu.js | 2 +- .../shared/style-inspector-overlays.js | 2 +- devtools/client/jsonview/converter-child.js | 2 +- devtools/client/jsonview/main.js | 2 +- devtools/client/main.js | 3 +-- devtools/client/memory/test/chrome/head.js | 2 +- devtools/client/memory/test/unit/head.js | 2 +- .../client/netmonitor/har/har-automation.js | 2 +- devtools/client/netmonitor/har/har-builder.js | 2 +- devtools/client/netmonitor/har/har-collector.js | 3 +-- devtools/client/netmonitor/har/har-exporter.js | 2 +- devtools/client/netmonitor/har/har-utils.js | 2 +- .../client/netmonitor/netmonitor-controller.js | 2 +- devtools/client/netmonitor/test/head.js | 2 +- devtools/client/performance/test/head.js | 2 +- devtools/client/performance/test/unit/head.js | 2 +- .../lib/plugins/app-manager/plugin.js | 2 +- .../client/projecteditor/lib/projecteditor.js | 2 +- .../client/projecteditor/lib/stores/local.js | 2 +- .../client/scratchpad/scratchpad-manager.jsm | 3 +-- devtools/client/scratchpad/scratchpad.js | 2 +- devtools/client/scratchpad/test/head.js | 2 +- devtools/client/shadereditor/shadereditor.js | 2 +- devtools/client/shadereditor/test/head.js | 11 +++++------ devtools/client/shared/AppCacheUtils.jsm | 2 +- devtools/client/shared/autocomplete-popup.js | 3 +-- devtools/client/shared/browser-loader.js | 2 +- .../shared/components/test/mochitest/head.js | 2 +- devtools/client/shared/devices.js | 2 +- devtools/client/shared/doorhanger.js | 2 +- devtools/client/shared/file-watcher.js | 4 ++-- devtools/client/shared/getjson.js | 2 +- devtools/client/shared/inplace-editor.js | 2 +- devtools/client/shared/options-view.js | 2 +- devtools/client/shared/output-parser.js | 2 +- devtools/client/shared/telemetry.js | 2 +- devtools/client/shared/theme-switching.js | 2 +- devtools/client/shared/theme.js | 2 +- devtools/client/shared/view-source.js | 2 +- devtools/client/shared/widgets/MdnDocsWidget.js | 2 +- devtools/client/shared/widgets/Tooltip.js | 2 +- .../client/shared/widgets/VariablesView.jsm | 2 +- .../shared/widgets/VariablesViewController.jsm | 2 +- devtools/client/shared/widgets/ViewHelpers.jsm | 2 +- devtools/client/shims/gDevTools.jsm | 2 +- devtools/client/sourceeditor/editor.js | 2 +- devtools/client/styleeditor/StyleEditorUtil.jsm | 3 +-- .../client/styleeditor/StyleSheetEditor.jsm | 2 +- .../client/styleeditor/styleeditor-panel.js | 2 +- devtools/client/styleeditor/utils.js | 2 +- devtools/client/tilt/tilt-gl.js | 3 +-- devtools/client/tilt/tilt-utils.js | 2 +- devtools/client/tilt/tilt-visualizer.js | 3 +-- devtools/client/tilt/tilt.js | 3 +-- devtools/client/webaudioeditor/includes.js | 2 +- devtools/client/webaudioeditor/test/head.js | 14 +++++++------- devtools/client/webconsole/console-output.js | 2 +- devtools/client/webconsole/hudservice.js | 2 +- devtools/client/webconsole/jsterm.js | 2 +- devtools/client/webconsole/webconsole.js | 3 ++- devtools/client/webide/content/addons.js | 2 +- devtools/client/webide/content/details.js | 2 +- devtools/client/webide/content/monitor.js | 2 +- devtools/client/webide/content/newapp.js | 2 +- .../client/webide/content/permissionstable.js | 2 +- .../client/webide/content/runtimedetails.js | 2 +- devtools/client/webide/content/simulator.js | 2 +- devtools/client/webide/content/wifi-auth.js | 2 +- devtools/client/webide/modules/addons.js | 2 +- devtools/client/webide/modules/config-view.js | 2 +- devtools/client/webide/modules/runtime-list.js | 2 +- devtools/client/webide/modules/runtimes.js | 2 +- .../client/webide/modules/simulator-process.js | 2 +- devtools/client/webide/modules/utils.js | 2 +- devtools/client/webide/test/head.js | 2 +- .../client/webide/test/test_app_validator.html | 2 +- devtools/server/actors/preference.js | 3 +-- devtools/server/actors/settings.js | 2 +- devtools/server/tests/browser/head.js | 2 +- .../server/tests/mochitest/memory-helpers.js | 15 +++++++-------- .../server/tests/mochitest/memprof-helpers.js | 17 ++++++++--------- .../mochitest/test_connection-manager.html | 2 +- .../mochitest/test_css-logic-inheritance.html | 2 +- .../mochitest/test_css-logic-media-queries.html | 2 +- .../server/tests/mochitest/test_device.html | 2 +- .../tests/mochitest/test_framerate_01.html | 9 ++++----- .../tests/mochitest/test_framerate_02.html | 9 ++++----- .../tests/mochitest/test_framerate_03.html | 9 ++++----- .../tests/mochitest/test_framerate_05.html | 9 ++++----- .../server/tests/mochitest/test_preference.html | 2 +- .../mochitest/test_setupInParentChild.html | 2 +- devtools/shared/apps/app-actor-front.js | 2 +- .../apps/tests/debugger-protocol-helper.js | 2 +- devtools/shared/apps/tests/unit/head_apps.js | 2 +- devtools/shared/client/connection-manager.js | 2 +- devtools/shared/content-observer.js | 2 +- devtools/shared/css-color.js | 2 +- devtools/shared/discovery/discovery.js | 2 +- .../discovery/tests/unit/test_discovery.js | 16 ++++++++-------- devtools/shared/gcli/commands/folder.js | 2 +- devtools/shared/gcli/commands/inject.js | 2 +- devtools/shared/gcli/commands/screenshot.js | 2 +- devtools/shared/gcli/source/lib/gcli/l10n.js | 2 +- .../shared/gcli/source/lib/gcli/settings.js | 2 +- .../shared/gcli/source/lib/gcli/util/l10n.js | 2 +- devtools/shared/indentation.js | 2 +- .../mochitest/test_devtools_extensions.html | 2 +- devtools/shared/webconsole/network-monitor.js | 2 +- devtools/shared/webconsole/test/common.js | 2 +- .../test/unit/test_security-info-static-hpkp.js | 2 +- devtools/shared/webconsole/utils.js | 3 +-- 131 files changed, 178 insertions(+), 201 deletions(-) diff --git a/devtools/client/canvasdebugger/canvasdebugger.js b/devtools/client/canvasdebugger/canvasdebugger.js index e5a1b0e2eb1e..8cdf9b7d1c62 100644 --- a/devtools/client/canvasdebugger/canvasdebugger.js +++ b/devtools/client/canvasdebugger/canvasdebugger.js @@ -5,7 +5,6 @@ var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://devtools/client/shared/widgets/SideMenuWidget.jsm"); Cu.import("resource://devtools/client/shared/widgets/ViewHelpers.jsm"); @@ -13,6 +12,7 @@ Cu.import("resource://gre/modules/Console.jsm"); const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); const promise = require("promise"); +const Services = require("Services"); const EventEmitter = require("devtools/shared/event-emitter"); const { CallWatcherFront } = require("devtools/server/actors/call-watcher"); const { CanvasFront } = require("devtools/server/actors/canvas"); diff --git a/devtools/client/canvasdebugger/test/head.js b/devtools/client/canvasdebugger/test/head.js index e36879ac5adc..1d8ba11268b7 100644 --- a/devtools/client/canvasdebugger/test/head.js +++ b/devtools/client/canvasdebugger/test/head.js @@ -4,17 +4,11 @@ var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; -var { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); - -// Disable logging for all the tests. Both the debugger server and frontend will -// be affected by this pref. -var gEnableLogging = Services.prefs.getBoolPref("devtools.debugger.log"); -Services.prefs.setBoolPref("devtools.debugger.log", false); - var { generateUUID } = Cc['@mozilla.org/uuid-generator;1'].getService(Ci.nsIUUIDGenerator); var { Task } = Cu.import("resource://gre/modules/Task.jsm", {}); var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); +var Services = require("Services"); var promise = require("promise"); var { gDevTools } = require("devtools/client/framework/devtools"); var { DebuggerClient } = require("devtools/shared/client/main"); @@ -43,6 +37,11 @@ const WEBGL_DRAW_ARRAYS = EXAMPLE_URL + "doc_webgl-drawArrays.html"; const WEBGL_DRAW_ELEMENTS = EXAMPLE_URL + "doc_webgl-drawElements.html"; const RAF_BEGIN_URL = EXAMPLE_URL + "doc_raf-begin.html"; +// Disable logging for all the tests. Both the debugger server and frontend will +// be affected by this pref. +var gEnableLogging = Services.prefs.getBoolPref("devtools.debugger.log"); +Services.prefs.setBoolPref("devtools.debugger.log", false); + // All tests are asynchronous. waitForExplicitFinish(); diff --git a/devtools/client/debugger/debugger-controller.js b/devtools/client/debugger/debugger-controller.js index 35ce949349bd..388b9e632865 100644 --- a/devtools/client/debugger/debugger-controller.js +++ b/devtools/client/debugger/debugger-controller.js @@ -93,7 +93,6 @@ const FRAME_TYPE = { PUBLIC_CLIENT_EVAL: 3 }; -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://devtools/shared/event-emitter.js"); Cu.import("resource://devtools/client/shared/widgets/SimpleListWidget.jsm"); @@ -137,6 +136,7 @@ var services = { WAIT_UNTIL: waitUntilService.NAME }; +var Services = require("Services"); var {TargetFactory} = require("devtools/client/framework/target"); var {Toolbox} = require("devtools/client/framework/toolbox"); var DevToolsUtils = require("devtools/shared/DevToolsUtils"); diff --git a/devtools/client/definitions.js b/devtools/client/definitions.js index 16794682afa8..1f7949544de5 100644 --- a/devtools/client/definitions.js +++ b/devtools/client/definitions.js @@ -5,8 +5,7 @@ "use strict"; const {Cc, Ci} = require("chrome"); - -const { Services } = require("resource://gre/modules/Services.jsm"); +const Services = require("Services"); loader.lazyGetter(this, "osString", () => Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).OS); diff --git a/devtools/client/eyedropper/eyedropper.js b/devtools/client/eyedropper/eyedropper.js index 30da4f8740a4..86deadc446ba 100644 --- a/devtools/client/eyedropper/eyedropper.js +++ b/devtools/client/eyedropper/eyedropper.js @@ -7,10 +7,9 @@ const {rgbToHsl} = require("devtools/shared/css-color").colorUtils; const Telemetry = require("devtools/client/shared/telemetry"); const {EventEmitter} = Cu.import("resource://devtools/shared/event-emitter.js"); const promise = require("promise"); +const Services = require("Services"); const {setTimeout, clearTimeout} = Cu.import("resource://gre/modules/Timer.jsm", {}); -Cu.import("resource://gre/modules/Services.jsm"); - loader.lazyGetter(this, "clipboardHelper", function() { return Cc["@mozilla.org/widget/clipboardhelper;1"] .getService(Ci.nsIClipboardHelper); diff --git a/devtools/client/framework/ToolboxProcess.jsm b/devtools/client/framework/ToolboxProcess.jsm index c51e738cdbe4..d8cba6b851bd 100644 --- a/devtools/client/framework/ToolboxProcess.jsm +++ b/devtools/client/framework/ToolboxProcess.jsm @@ -11,7 +11,6 @@ const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; const DBG_XUL = "chrome://devtools/content/framework/toolbox-process-window.xul"; const CHROME_DEBUGGER_PROFILE_NAME = "chrome_debugger_profile"; -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm") const { require, DevToolsLoader } = Cu.import("resource://devtools/shared/Loader.jsm", {}); @@ -22,6 +21,7 @@ XPCOMUtils.defineLazyGetter(this, "EventEmitter", function () { return require("devtools/shared/event-emitter"); }); const promise = require("promise"); +const Services = require("Services"); this.EXPORTED_SYMBOLS = ["BrowserToolboxProcess"]; diff --git a/devtools/client/framework/attach-thread.js b/devtools/client/framework/attach-thread.js index 422ab644f199..1a44e8a9bb80 100644 --- a/devtools/client/framework/attach-thread.js +++ b/devtools/client/framework/attach-thread.js @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ const {Cc, Ci, Cu} = require("chrome"); -const Services = Cu.import("resource://gre/modules/Services.jsm", {}).Services; +const Services = require("Services"); const promise = require("promise"); function l10n(name) { diff --git a/devtools/client/framework/connect/connect.js b/devtools/client/framework/connect/connect.js index 5284cc7585a7..1c4cc011aca0 100644 --- a/devtools/client/framework/connect/connect.js +++ b/devtools/client/framework/connect/connect.js @@ -8,9 +8,9 @@ var Cu = Components.utils; Cu.import('resource://gre/modules/XPCOMUtils.jsm'); -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/Task.jsm"); var {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); +var Services = require("Services"); var {gDevTools} = require("devtools/client/framework/devtools"); var {TargetFactory} = require("devtools/client/framework/target"); var {Toolbox} = require("devtools/client/framework/toolbox") diff --git a/devtools/client/framework/sidebar.js b/devtools/client/framework/sidebar.js index ca551aed4526..f88ae5c0918b 100644 --- a/devtools/client/framework/sidebar.js +++ b/devtools/client/framework/sidebar.js @@ -7,9 +7,9 @@ const {Cu} = require("chrome"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/Task.jsm"); +var Services = require("Services"); var EventEmitter = require("devtools/shared/event-emitter"); var Telemetry = require("devtools/client/shared/telemetry"); diff --git a/devtools/client/framework/test/shared-head.js b/devtools/client/framework/test/shared-head.js index 5df1e6c97c79..ba105011f4ab 100644 --- a/devtools/client/framework/test/shared-head.js +++ b/devtools/client/framework/test/shared-head.js @@ -17,7 +17,6 @@ function scopedCuImport(path) { return scope; } -const {Services} = scopedCuImport("resource://gre/modules/Services.jsm"); const {console} = scopedCuImport("resource://gre/modules/Console.jsm"); const {ScratchpadManager} = scopedCuImport("resource://devtools/client/scratchpad/scratchpad-manager.jsm"); const {require} = scopedCuImport("resource://devtools/shared/Loader.jsm"); @@ -26,6 +25,7 @@ const {gDevTools} = require("devtools/client/framework/devtools"); const {TargetFactory} = require("devtools/client/framework/target"); const DevToolsUtils = require("devtools/shared/DevToolsUtils"); let promise = require("promise"); +const Services = require("Services"); const TEST_DIR = gTestPath.substr(0, gTestPath.lastIndexOf("/")); const CHROME_URL_ROOT = TEST_DIR + "/"; diff --git a/devtools/client/framework/toolbox-hosts.js b/devtools/client/framework/toolbox-hosts.js index 47ce544cbf4d..a7c3b7d4cf41 100644 --- a/devtools/client/framework/toolbox-hosts.js +++ b/devtools/client/framework/toolbox-hosts.js @@ -9,7 +9,7 @@ const {Cu} = require("chrome"); const EventEmitter = require("devtools/shared/event-emitter"); const promise = require("promise"); -Cu.import("resource://gre/modules/Services.jsm"); +const Services = require("Services"); Cu.import("resource://devtools/client/shared/DOMHelpers.jsm"); loader.lazyRequireGetter(this, "system", "devtools/shared/system"); diff --git a/devtools/client/framework/toolbox-process-window.js b/devtools/client/framework/toolbox-process-window.js index ca6b56150abc..ea38d9a3ffa2 100644 --- a/devtools/client/framework/toolbox-process-window.js +++ b/devtools/client/framework/toolbox-process-window.js @@ -16,7 +16,7 @@ require("devtools/client/framework/devtools-browser"); var { gDevTools } = require("devtools/client/framework/devtools"); var { TargetFactory } = require("devtools/client/framework/target"); var { Toolbox } = require("devtools/client/framework/toolbox"); -var { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); +var Services = require("Services"); var { DebuggerClient } = require("devtools/shared/client/main"); var { ViewHelpers } = Cu.import("resource://devtools/client/shared/widgets/ViewHelpers.jsm", {}); diff --git a/devtools/client/framework/toolbox.js b/devtools/client/framework/toolbox.js index 1cf89156d025..a9f6fdbb72e7 100644 --- a/devtools/client/framework/toolbox.js +++ b/devtools/client/framework/toolbox.js @@ -18,6 +18,7 @@ const SCREENSIZE_HISTOGRAM = "DEVTOOLS_SCREEN_RESOLUTION_ENUMERATED_PER_USER"; var {Cc, Ci, Cu} = require("chrome"); var promise = require("promise"); +var Services = require("Services"); var {gDevTools} = require("devtools/client/framework/devtools"); var EventEmitter = require("devtools/shared/event-emitter"); var Telemetry = require("devtools/client/shared/telemetry"); @@ -25,7 +26,6 @@ var HUDService = require("devtools/client/webconsole/hudservice"); var viewSource = require("devtools/client/shared/view-source"); var { attachThread, detachThread } = require("./attach-thread"); -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://devtools/client/scratchpad/scratchpad-manager.jsm"); Cu.import("resource://devtools/client/shared/DOMHelpers.jsm"); Cu.import("resource://gre/modules/Task.jsm"); diff --git a/devtools/client/inspector/breadcrumbs.js b/devtools/client/inspector/breadcrumbs.js index b0b2828538cf..57e3361c5bfe 100644 --- a/devtools/client/inspector/breadcrumbs.js +++ b/devtools/client/inspector/breadcrumbs.js @@ -8,7 +8,7 @@ const {Cu, Ci} = require("chrome"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); +const Services = require("Services"); const promise = require("promise"); const ENSURE_SELECTION_VISIBLE_DELAY = 50; // ms diff --git a/devtools/client/inspector/computed/computed.js b/devtools/client/inspector/computed/computed.js index c18f27144fab..a5f7850e2b2b 100644 --- a/devtools/client/inspector/computed/computed.js +++ b/devtools/client/inspector/computed/computed.js @@ -14,6 +14,7 @@ const ToolDefinitions = require("devtools/client/main").Tools; const {CssLogic} = require("devtools/shared/inspector/css-logic"); const {ELEMENT_STYLE} = require("devtools/server/actors/styles"); const promise = require("promise"); +const Services = require("Services"); const {setTimeout, clearTimeout} = Cu.import("resource://gre/modules/Timer.jsm", {}); const {OutputParser} = require("devtools/client/shared/output-parser"); const {PrefObserver, PREF_ORIG_SOURCES} = require("devtools/client/styleeditor/utils"); @@ -25,7 +26,6 @@ loader.lazyRequireGetter(this, "overlays", loader.lazyRequireGetter(this, "StyleInspectorMenu", "devtools/client/inspector/shared/style-inspector-menu"); -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "PluralForm", diff --git a/devtools/client/inspector/inspector-panel.js b/devtools/client/inspector/inspector-panel.js index d358e9385068..7e20e2e7d1d7 100644 --- a/devtools/client/inspector/inspector-panel.js +++ b/devtools/client/inspector/inspector-panel.js @@ -8,8 +8,7 @@ const {Cc, Ci, Cu} = require("chrome"); -Cu.import("resource://gre/modules/Services.jsm"); - +var Services = require("Services"); var promise = require("promise"); var EventEmitter = require("devtools/shared/event-emitter"); var clipboard = require("sdk/clipboard"); diff --git a/devtools/client/inspector/markup/html-editor.js b/devtools/client/inspector/markup/html-editor.js index 02c0f1ff3144..2447868273da 100644 --- a/devtools/client/inspector/markup/html-editor.js +++ b/devtools/client/inspector/markup/html-editor.js @@ -6,7 +6,7 @@ const {Cu} = require("chrome"); const Editor = require("devtools/client/sourceeditor/editor"); -Cu.import("resource://gre/modules/Services.jsm"); +const Services = require("Services"); Cu.import("resource://devtools/shared/event-emitter.js"); /** diff --git a/devtools/client/inspector/markup/markup.js b/devtools/client/inspector/markup/markup.js index 52b7eb6d5887..e01caf6a4258 100644 --- a/devtools/client/inspector/markup/markup.js +++ b/devtools/client/inspector/markup/markup.js @@ -42,7 +42,6 @@ const {scrollIntoViewIfNeeded} = require("devtools/shared/layout/utils"); const {PrefObserver} = require("devtools/client/styleeditor/utils"); Cu.import("resource://devtools/shared/gcli/Templater.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); loader.lazyRequireGetter(this, "CSS", "CSS"); diff --git a/devtools/client/inspector/rules/models/element-style.js b/devtools/client/inspector/rules/models/element-style.js index b0cd714c5d88..fed8eee44f7a 100644 --- a/devtools/client/inspector/rules/models/element-style.js +++ b/devtools/client/inspector/rules/models/element-style.js @@ -13,8 +13,6 @@ const {promiseWarn} = require("devtools/client/inspector/shared/utils"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -loader.lazyImporter(this, "Services", "resource://gre/modules/Services.jsm"); - loader.lazyGetter(this, "PSEUDO_ELEMENTS", () => { return domUtils.getCSSPseudoElementNames(); }); diff --git a/devtools/client/inspector/rules/rules.js b/devtools/client/inspector/rules/rules.js index 0279be26c622..9f765cc65563 100644 --- a/devtools/client/inspector/rules/rules.js +++ b/devtools/client/inspector/rules/rules.js @@ -9,6 +9,7 @@ const {Cc, Ci, Cu} = require("chrome"); const promise = require("promise"); +const Services = require("Services"); const {Tools} = require("devtools/client/main"); const {setTimeout, clearTimeout} = Cu.import("resource://gre/modules/Timer.jsm", {}); @@ -34,7 +35,6 @@ loader.lazyRequireGetter(this, "EventEmitter", "devtools/shared/event-emitter"); loader.lazyRequireGetter(this, "StyleInspectorMenu", "devtools/client/inspector/shared/style-inspector-menu"); -loader.lazyImporter(this, "Services", "resource://gre/modules/Services.jsm"); XPCOMUtils.defineLazyGetter(this, "clipboardHelper", function() { return Cc["@mozilla.org/widget/clipboardhelper;1"] diff --git a/devtools/client/inspector/shared/style-inspector-menu.js b/devtools/client/inspector/shared/style-inspector-menu.js index b6bd225165a4..94f1b982530e 100644 --- a/devtools/client/inspector/shared/style-inspector-menu.js +++ b/devtools/client/inspector/shared/style-inspector-menu.js @@ -8,10 +8,10 @@ "use strict"; const {PREF_ORIG_SOURCES} = require("devtools/client/styleeditor/utils"); +const Services = require("Services"); loader.lazyRequireGetter(this, "overlays", "devtools/client/inspector/shared/style-inspector-overlays"); -loader.lazyImporter(this, "Services", "resource://gre/modules/Services.jsm"); loader.lazyServiceGetter(this, "clipboardHelper", "@mozilla.org/widget/clipboardhelper;1", "nsIClipboardHelper"); loader.lazyGetter(this, "_strings", () => { diff --git a/devtools/client/inspector/shared/style-inspector-overlays.js b/devtools/client/inspector/shared/style-inspector-overlays.js index addf36c9fff5..253d29e307e9 100644 --- a/devtools/client/inspector/shared/style-inspector-overlays.js +++ b/devtools/client/inspector/shared/style-inspector-overlays.js @@ -23,7 +23,7 @@ const { const EventEmitter = require("devtools/shared/event-emitter"); const promise = require("promise"); Cu.import("resource://gre/modules/Task.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); +const Services = require("Services"); const PREF_IMAGE_TOOLTIP_SIZE = "devtools.inspector.imagePreviewTooltipSize"; diff --git a/devtools/client/jsonview/converter-child.js b/devtools/client/jsonview/converter-child.js index 53a1993d21ce..92bad8e76879 100644 --- a/devtools/client/jsonview/converter-child.js +++ b/devtools/client/jsonview/converter-child.js @@ -7,6 +7,7 @@ "use strict"; const {Cu, Cc, Ci, components} = require("chrome"); +const Services = require("Services"); const {Class} = require("sdk/core/heritage"); const {Unknown} = require("sdk/platform/xpcom"); const xpcom = require("sdk/platform/xpcom"); @@ -18,7 +19,6 @@ loader.lazyRequireGetter(this, "NetworkHelper", loader.lazyRequireGetter(this, "JsonViewUtils", "devtools/client/jsonview/utils"); -const {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); const childProcessMessageManager = Cc["@mozilla.org/childprocessmessagemanager;1"]. diff --git a/devtools/client/jsonview/main.js b/devtools/client/jsonview/main.js index 47d6d78270a4..68fefbcfb762 100644 --- a/devtools/client/jsonview/main.js +++ b/devtools/client/jsonview/main.js @@ -7,9 +7,9 @@ "use strict"; const {Cu, Ci, Cc} = require("chrome"); +const Services = require("Services"); const {XPCOMUtils} = Cu.import("resource://gre/modules/XPCOMUtils.jsm", {}); -const {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); XPCOMUtils.defineLazyGetter(this, "JsonViewService", function() { return require("devtools/client/jsonview/utils"); diff --git a/devtools/client/main.js b/devtools/client/main.js index f632ae0cca73..627a40964226 100644 --- a/devtools/client/main.js +++ b/devtools/client/main.js @@ -4,8 +4,7 @@ "use strict"; -const { Cu } = require("chrome"); -Cu.import("resource://gre/modules/Services.jsm"); +const Services = require("Services"); const { gDevTools } = require("devtools/client/framework/devtools"); const { defaultTools, defaultThemes } = require("devtools/client/definitions"); diff --git a/devtools/client/memory/test/chrome/head.js b/devtools/client/memory/test/chrome/head.js index cdbd0889b643..1c96cee1a6b3 100644 --- a/devtools/client/memory/test/chrome/head.js +++ b/devtools/client/memory/test/chrome/head.js @@ -6,10 +6,10 @@ var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; Cu.import("resource://testing-common/Assert.jsm"); Cu.import("resource://gre/modules/Task.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://devtools/client/shared/browser-loader.js"); var { require } = BrowserLoader("resource://devtools/client/memory/", this); +var Services = require("Services"); var DevToolsUtils = require("devtools/shared/DevToolsUtils"); DevToolsUtils.testing = true; diff --git a/devtools/client/memory/test/unit/head.js b/devtools/client/memory/test/unit/head.js index e91f240c6898..15d2b4536ea8 100644 --- a/devtools/client/memory/test/unit/head.js +++ b/devtools/client/memory/test/unit/head.js @@ -4,10 +4,10 @@ "use strict"; var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; -var { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); var { console } = Cu.import("resource://gre/modules/Console.jsm", {}); var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); +var Services = require("Services"); var DevToolsUtils = require("devtools/shared/DevToolsUtils"); DevToolsUtils.testing = true; DevToolsUtils.dumpn.wantLogging = true; diff --git a/devtools/client/netmonitor/har/har-automation.js b/devtools/client/netmonitor/har/har-automation.js index 665917e17206..5bdb11aaa001 100644 --- a/devtools/client/netmonitor/har/har-automation.js +++ b/devtools/client/netmonitor/har/har-automation.js @@ -6,7 +6,7 @@ const { Cu, Ci, Cc } = require("chrome"); const { Class } = require("sdk/core/heritage"); const { defer, resolve } = require("promise"); -const { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); +const Services = require("Services"); Cu.import("resource://gre/modules/Task.jsm"); diff --git a/devtools/client/netmonitor/har/har-builder.js b/devtools/client/netmonitor/har/har-builder.js index 0339cb59c905..5b89ed2aa9a5 100644 --- a/devtools/client/netmonitor/har/har-builder.js +++ b/devtools/client/netmonitor/har/har-builder.js @@ -5,7 +5,7 @@ const { Cu, Ci, Cc } = require("chrome"); const { defer, all, resolve } = require("promise"); -const { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); +const Services = require("Services"); loader.lazyImporter(this, "ViewHelpers", "resource://devtools/client/shared/widgets/ViewHelpers.jsm"); loader.lazyRequireGetter(this, "NetworkHelper", "devtools/shared/webconsole/network-helper"); diff --git a/devtools/client/netmonitor/har/har-collector.js b/devtools/client/netmonitor/har/har-collector.js index 79873fc8717e..8a99983d703a 100644 --- a/devtools/client/netmonitor/har/har-collector.js +++ b/devtools/client/netmonitor/har/har-collector.js @@ -7,8 +7,7 @@ const { Cu, Ci, Cc } = require("chrome"); const { defer, all } = require("promise"); const { setTimeout, clearTimeout } = require("sdk/timers"); const { makeInfallible } = require("devtools/shared/DevToolsUtils"); - -const { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); +const Services = require("Services"); // Helper tracer. Should be generic sharable by other modules (bug 1171927) const trace = { diff --git a/devtools/client/netmonitor/har/har-exporter.js b/devtools/client/netmonitor/har/har-exporter.js index 7a757ba06d0c..01dc6ba1636c 100644 --- a/devtools/client/netmonitor/har/har-exporter.js +++ b/devtools/client/netmonitor/har/har-exporter.js @@ -4,7 +4,7 @@ "use strict"; const { Cu, Cc, Ci } = require("chrome"); -const { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); +const Services = require("Services"); const { defer, resolve } = require("promise"); const { HarUtils } = require("./har-utils.js"); const { HarBuilder } = require("./har-builder.js"); diff --git a/devtools/client/netmonitor/har/har-utils.js b/devtools/client/netmonitor/har/har-utils.js index 421c74d71c51..da10ce9a095b 100644 --- a/devtools/client/netmonitor/har/har-utils.js +++ b/devtools/client/netmonitor/har/har-utils.js @@ -4,7 +4,7 @@ "use strict"; const { Cu, Ci, Cc, CC } = require("chrome"); -const { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); +const Services = require("Services"); XPCOMUtils.defineLazyGetter(this, "dirService", function() { return Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties); diff --git a/devtools/client/netmonitor/netmonitor-controller.js b/devtools/client/netmonitor/netmonitor-controller.js index 0ec70712697b..de9a19d63ed5 100644 --- a/devtools/client/netmonitor/netmonitor-controller.js +++ b/devtools/client/netmonitor/netmonitor-controller.js @@ -110,7 +110,6 @@ const ACTIVITY_TYPE = { DISABLE_CACHE: 4 }; -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://devtools/client/shared/widgets/SideMenuWidget.jsm"); Cu.import("resource://devtools/client/shared/widgets/VariablesView.jsm"); @@ -119,6 +118,7 @@ Cu.import("resource://devtools/client/shared/widgets/ViewHelpers.jsm"); const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); const promise = require("promise"); +const Services = require("Services"); const EventEmitter = require("devtools/shared/event-emitter"); const Editor = require("devtools/client/sourceeditor/editor"); const {Tooltip} = require("devtools/client/shared/widgets/Tooltip"); diff --git a/devtools/client/netmonitor/test/head.js b/devtools/client/netmonitor/test/head.js index a27fe46d0347..f978db112a09 100644 --- a/devtools/client/netmonitor/test/head.js +++ b/devtools/client/netmonitor/test/head.js @@ -4,11 +4,11 @@ var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; -var { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); var { Task } = Cu.import("resource://gre/modules/Task.jsm", {}); var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); var { gDevTools } = require("devtools/client/framework/devtools"); var { CurlUtils } = Cu.import("resource://devtools/client/shared/Curl.jsm", {}); +var Services = require("Services"); var promise = require("promise"); var NetworkHelper = require("devtools/shared/webconsole/network-helper"); var DevToolsUtils = require("devtools/shared/DevToolsUtils"); diff --git a/devtools/client/performance/test/head.js b/devtools/client/performance/test/head.js index 846acbddcfab..e2fbad151207 100644 --- a/devtools/client/performance/test/head.js +++ b/devtools/client/performance/test/head.js @@ -4,12 +4,12 @@ var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; -var { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); var { Preferences } = Cu.import("resource://gre/modules/Preferences.jsm", {}); var { Task } = Cu.import("resource://gre/modules/Task.jsm", {}); var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); var { gDevTools } = require("devtools/client/framework/devtools"); var { console } = require("resource://gre/modules/Console.jsm"); +var Services = require("Services"); var { TargetFactory } = require("devtools/client/framework/target"); var Promise = require("promise"); var DevToolsUtils = require("devtools/shared/DevToolsUtils"); diff --git a/devtools/client/performance/test/unit/head.js b/devtools/client/performance/test/unit/head.js index 76fd030b1c5d..53a99978ef15 100644 --- a/devtools/client/performance/test/unit/head.js +++ b/devtools/client/performance/test/unit/head.js @@ -5,7 +5,7 @@ var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); -var { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); +var Services = require("Services"); var { console } = require("resource://gre/modules/Console.jsm"); const RecordingUtils = require("devtools/shared/performance/recording-utils"); const PLATFORM_DATA_PREF = "devtools.performance.ui.show-platform-data"; diff --git a/devtools/client/projecteditor/lib/plugins/app-manager/plugin.js b/devtools/client/projecteditor/lib/plugins/app-manager/plugin.js index 354de9ebfe28..63d52fa0e515 100644 --- a/devtools/client/projecteditor/lib/plugins/app-manager/plugin.js +++ b/devtools/client/projecteditor/lib/plugins/app-manager/plugin.js @@ -6,7 +6,7 @@ const promise = require("promise"); var { registerPlugin, Plugin } = require("devtools/client/projecteditor/lib/plugins/core"); const { AppProjectEditor } = require("./app-project-editor"); const OPTION_URL = "chrome://devtools/skin/images/tool-options.svg"; -const {Services} = Cu.import("resource://gre/modules/Services.jsm"); +const Services = require("Services"); const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties"); var AppManagerRenderer = Class({ diff --git a/devtools/client/projecteditor/lib/projecteditor.js b/devtools/client/projecteditor/lib/projecteditor.js index 054530d4b97a..52676ca251fb 100644 --- a/devtools/client/projecteditor/lib/projecteditor.js +++ b/devtools/client/projecteditor/lib/projecteditor.js @@ -18,7 +18,7 @@ const { merge } = require("sdk/util/object"); const promise = require("promise"); const { ViewHelpers } = Cu.import("resource://devtools/client/shared/widgets/ViewHelpers.jsm", {}); const { DOMHelpers } = Cu.import("resource://devtools/client/shared/DOMHelpers.jsm"); -const { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); +const Services = require("Services"); const { Task } = Cu.import("resource://gre/modules/Task.jsm", {}); const ITCHPAD_URL = "chrome://devtools/content/projecteditor/chrome/content/projecteditor.xul"; const { confirm } = require("devtools/client/projecteditor/lib/helpers/prompts"); diff --git a/devtools/client/projecteditor/lib/stores/local.js b/devtools/client/projecteditor/lib/stores/local.js index 1eaf4a9a963c..fdb3eb153491 100644 --- a/devtools/client/projecteditor/lib/stores/local.js +++ b/devtools/client/projecteditor/lib/stores/local.js @@ -11,9 +11,9 @@ const { emit } = require("sdk/event/core"); const { Store } = require("devtools/client/projecteditor/lib/stores/base"); const { Task } = Cu.import("resource://gre/modules/Task.jsm", {}); const promise = require("promise"); +const Services = require("Services"); const { on, forget } = require("devtools/client/projecteditor/lib/helpers/event"); const { FileResource } = require("devtools/client/projecteditor/lib/stores/resource"); -const {Services} = Cu.import("resource://gre/modules/Services.jsm"); const {setTimeout, clearTimeout} = Cu.import("resource://gre/modules/Timer.jsm", {}); const CHECK_LINKED_DIRECTORY_DELAY = 5000; diff --git a/devtools/client/scratchpad/scratchpad-manager.jsm b/devtools/client/scratchpad/scratchpad-manager.jsm index 3a1fcb28a869..43f2df79ed65 100644 --- a/devtools/client/scratchpad/scratchpad-manager.jsm +++ b/devtools/client/scratchpad/scratchpad-manager.jsm @@ -14,9 +14,8 @@ const Cu = Components.utils; const SCRATCHPAD_WINDOW_URL = "chrome://devtools/content/scratchpad/scratchpad.xul"; const SCRATCHPAD_WINDOW_FEATURES = "chrome,titlebar,toolbar,centerscreen,resizable,dialog=no"; -Cu.import("resource://gre/modules/Services.jsm"); const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); - +const Services = require("Services"); const Telemetry = require("devtools/client/shared/telemetry"); diff --git a/devtools/client/scratchpad/scratchpad.js b/devtools/client/scratchpad/scratchpad.js index 78fe239df9fb..abb67fa51560 100644 --- a/devtools/client/scratchpad/scratchpad.js +++ b/devtools/client/scratchpad/scratchpad.js @@ -52,10 +52,10 @@ const EventEmitter = require("devtools/shared/event-emitter"); const {DevToolsWorker} = require("devtools/shared/worker/worker"); const DevToolsUtils = require("devtools/shared/DevToolsUtils"); const promise = require("promise"); +const Services = require("Services"); const {gDevTools} = require("devtools/client/framework/devtools"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/NetUtil.jsm"); Cu.import("resource://devtools/client/scratchpad/scratchpad-manager.jsm"); Cu.import("resource://gre/modules/jsdebugger.jsm"); diff --git a/devtools/client/scratchpad/test/head.js b/devtools/client/scratchpad/test/head.js index 75aa91252b78..f6e1fca46405 100644 --- a/devtools/client/scratchpad/test/head.js +++ b/devtools/client/scratchpad/test/head.js @@ -8,7 +8,7 @@ const {NetUtil} = Cu.import("resource://gre/modules/NetUtil.jsm", {}); const {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm", {}); const {console} = Cu.import("resource://gre/modules/Console.jsm", {}); const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); -const {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); +const Services = require("Services"); const DevToolsUtils = require("devtools/shared/DevToolsUtils"); const promise = require("promise"); diff --git a/devtools/client/shadereditor/shadereditor.js b/devtools/client/shadereditor/shadereditor.js index 4eec168e1718..b5b97c11702e 100644 --- a/devtools/client/shadereditor/shadereditor.js +++ b/devtools/client/shadereditor/shadereditor.js @@ -5,7 +5,6 @@ var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Task.jsm"); Cu.import("resource://devtools/client/shared/widgets/SideMenuWidget.jsm"); @@ -14,6 +13,7 @@ Cu.import("resource://gre/modules/Console.jsm"); const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); const promise = require("promise"); +const Services = require("Services"); const EventEmitter = require("devtools/shared/event-emitter"); const {Tooltip} = require("devtools/client/shared/widgets/Tooltip"); const Editor = require("devtools/client/sourceeditor/editor"); diff --git a/devtools/client/shadereditor/test/head.js b/devtools/client/shadereditor/test/head.js index 4429482667e6..67129eadd62d 100644 --- a/devtools/client/shadereditor/test/head.js +++ b/devtools/client/shadereditor/test/head.js @@ -4,15 +4,10 @@ var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; -var { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); - -var gEnableLogging = Services.prefs.getBoolPref("devtools.debugger.log"); -// To enable logging for try runs, just set the pref to true. -Services.prefs.setBoolPref("devtools.debugger.log", false); - var { Task } = Cu.import("resource://gre/modules/Task.jsm", {}); var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); +var Services = require("Services"); var promise = require("promise"); var { gDevTools } = require("devtools/client/framework/devtools"); var { DebuggerClient } = require("devtools/shared/client/main"); @@ -32,6 +27,10 @@ const MULTIPLE_CONTEXTS_URL = EXAMPLE_URL + "doc_multiple-contexts.html"; const OVERLAPPING_GEOMETRY_CANVAS_URL = EXAMPLE_URL + "doc_overlapping-geometry.html"; const BLENDED_GEOMETRY_CANVAS_URL = EXAMPLE_URL + "doc_blended-geometry.html"; +var gEnableLogging = Services.prefs.getBoolPref("devtools.debugger.log"); +// To enable logging for try runs, just set the pref to true. +Services.prefs.setBoolPref("devtools.debugger.log", false); + // All tests are asynchronous. waitForExplicitFinish(); diff --git a/devtools/client/shared/AppCacheUtils.jsm b/devtools/client/shared/AppCacheUtils.jsm index 0bff661a85af..2e997bba1d6a 100644 --- a/devtools/client/shared/AppCacheUtils.jsm +++ b/devtools/client/shared/AppCacheUtils.jsm @@ -28,10 +28,10 @@ const { classes: Cc, interfaces: Ci, utils: Cu } = Components; var { XPCOMUtils } = Cu.import("resource://gre/modules/XPCOMUtils.jsm", {}); -var { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); var { NetUtil } = Cu.import("resource://gre/modules/NetUtil.jsm", {}); var { LoadContextInfo } = Cu.import("resource://gre/modules/LoadContextInfo.jsm", {}); var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); +var Services = require("Services"); var promise = require("promise"); this.EXPORTED_SYMBOLS = ["AppCacheUtils"]; diff --git a/devtools/client/shared/autocomplete-popup.js b/devtools/client/shared/autocomplete-popup.js index 355c1f1a1d0b..bd09334c1657 100644 --- a/devtools/client/shared/autocomplete-popup.js +++ b/devtools/client/shared/autocomplete-popup.js @@ -7,8 +7,7 @@ const {Cc, Ci, Cu} = require("chrome"); const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; - -loader.lazyImporter(this, "Services", "resource://gre/modules/Services.jsm"); +const Services = require("Services"); const {gDevTools} = require("devtools/client/framework/devtools"); const events = require("devtools/shared/event-emitter"); diff --git a/devtools/client/shared/browser-loader.js b/devtools/client/shared/browser-loader.js index 3ac9bb98e5f7..c0a918be8b9d 100644 --- a/devtools/client/shared/browser-loader.js +++ b/devtools/client/shared/browser-loader.js @@ -8,7 +8,7 @@ var { classes: Cc, interfaces: Ci, utils: Cu } = Components; const loaders = Cu.import("resource://gre/modules/commonjs/toolkit/loader.js", {}); const { devtools } = Cu.import("resource://devtools/shared/Loader.jsm", {}); const { joinURI } = devtools.require("devtools/shared/path"); -const { Services } = devtools.require("resource://gre/modules/Services.jsm"); +const Services = devtools.require("Services"); Cu.import("resource://gre/modules/AppConstants.jsm"); const BROWSER_BASED_DIRS = [ diff --git a/devtools/client/shared/components/test/mochitest/head.js b/devtools/client/shared/components/test/mochitest/head.js index f037dc370553..2d19e6a1ca6e 100644 --- a/devtools/client/shared/components/test/mochitest/head.js +++ b/devtools/client/shared/components/test/mochitest/head.js @@ -6,12 +6,12 @@ var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; Cu.import("resource://testing-common/Assert.jsm"); Cu.import("resource://gre/modules/Task.jsm"); -var { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); var { gDevTools } = require("devtools/client/framework/devtools"); var { BrowserLoader } = Cu.import("resource://devtools/client/shared/browser-loader.js", {}); var promise = require("promise"); +var Services = require("Services"); var { DebuggerServer } = require("devtools/server/main"); var { DebuggerClient } = require("devtools/shared/client/main"); var DevToolsUtils = require("devtools/shared/DevToolsUtils"); diff --git a/devtools/client/shared/devices.js b/devtools/client/shared/devices.js index b76b12604f76..ab979badf866 100644 --- a/devtools/client/shared/devices.js +++ b/devtools/client/shared/devices.js @@ -6,7 +6,7 @@ const { Ci, Cc } = require("chrome"); const { getJSON } = require("devtools/client/shared/getjson"); -const { Services } = require("resource://gre/modules/Services.jsm"); +const Services = require("Services"); const promise = require("promise"); const DEVICES_URL = "devtools.devices.url"; diff --git a/devtools/client/shared/doorhanger.js b/devtools/client/shared/doorhanger.js index 6c5b701a6ffb..e78614f0ae99 100644 --- a/devtools/client/shared/doorhanger.js +++ b/devtools/client/shared/doorhanger.js @@ -5,7 +5,7 @@ "use strict"; const { Ci, Cc } = require("chrome"); -const { Services } = require("resource://gre/modules/Services.jsm"); +const Services = require("Services"); const { DOMHelpers } = require("resource://devtools/client/shared/DOMHelpers.jsm"); const { Task } = require("resource://gre/modules/Task.jsm"); const { Promise } = require("resource://gre/modules/Promise.jsm"); diff --git a/devtools/client/shared/file-watcher.js b/devtools/client/shared/file-watcher.js index d74ca6e4be34..e0a2bafc8390 100644 --- a/devtools/client/shared/file-watcher.js +++ b/devtools/client/shared/file-watcher.js @@ -3,8 +3,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ "use strict"; -const { Ci, Cu, ChromeWorker } = require("chrome"); -const { Services } = require("resource://gre/modules/Services.jsm"); +const { Ci, ChromeWorker } = require("chrome"); +const Services = require("Services"); const EventEmitter = require("devtools/shared/event-emitter"); const HOTRELOAD_PREF = "devtools.loader.hotreload"; diff --git a/devtools/client/shared/getjson.js b/devtools/client/shared/getjson.js index e942b61d7a5b..2002524fab6f 100644 --- a/devtools/client/shared/getjson.js +++ b/devtools/client/shared/getjson.js @@ -4,7 +4,7 @@ const {Cu, CC} = require("chrome"); const promise = require("promise"); -const {Services} = Cu.import("resource://gre/modules/Services.jsm"); +const Services = require("Services"); const XMLHttpRequest = CC("@mozilla.org/xmlextras/xmlhttprequest;1"); diff --git a/devtools/client/shared/inplace-editor.js b/devtools/client/shared/inplace-editor.js index 247c6ab99a0d..20a38e2c8247 100644 --- a/devtools/client/shared/inplace-editor.js +++ b/devtools/client/shared/inplace-editor.js @@ -24,6 +24,7 @@ "use strict"; const {Ci, Cu, Cc} = require("chrome"); +const Services = require("Services"); const HTML_NS = "http://www.w3.org/1999/xhtml"; const CONTENT_TYPES = { @@ -37,7 +38,6 @@ const MAX_POPUP_ENTRIES = 10; const FOCUS_FORWARD = Ci.nsIFocusManager.MOVEFOCUS_FORWARD; const FOCUS_BACKWARD = Ci.nsIFocusManager.MOVEFOCUS_BACKWARD; -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://devtools/shared/event-emitter.js"); diff --git a/devtools/client/shared/options-view.js b/devtools/client/shared/options-view.js index 1796022de7db..9936b6c2e990 100644 --- a/devtools/client/shared/options-view.js +++ b/devtools/client/shared/options-view.js @@ -1,5 +1,5 @@ const EventEmitter = require("devtools/shared/event-emitter"); -const { Services } = require("resource://gre/modules/Services.jsm"); +const Services = require("Services"); const { Preferences } = require("resource://gre/modules/Preferences.jsm"); const OPTIONS_SHOWN_EVENT = "options-shown"; const OPTIONS_HIDDEN_EVENT = "options-hidden"; diff --git a/devtools/client/shared/output-parser.js b/devtools/client/shared/output-parser.js index c3d29d4a932d..a9c06675e7a7 100644 --- a/devtools/client/shared/output-parser.js +++ b/devtools/client/shared/output-parser.js @@ -6,7 +6,7 @@ const {Cc, Ci, Cu} = require("chrome"); const {colorUtils} = require("devtools/shared/css-color"); -const {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); +const Services = require("Services"); const HTML_NS = "http://www.w3.org/1999/xhtml"; diff --git a/devtools/client/shared/telemetry.js b/devtools/client/shared/telemetry.js index 72cc5fb0471e..462798003ca3 100644 --- a/devtools/client/shared/telemetry.js +++ b/devtools/client/shared/telemetry.js @@ -55,7 +55,7 @@ this.Telemetry = function() { module.exports = Telemetry; var {Cc, Ci, Cu} = require("chrome"); -var {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); +var Services = require("Services"); var {XPCOMUtils} = Cu.import("resource://gre/modules/XPCOMUtils.jsm", {}); Telemetry.prototype = { diff --git a/devtools/client/shared/theme-switching.js b/devtools/client/shared/theme-switching.js index 2cd3d05f0d11..f6dc81f0c05d 100644 --- a/devtools/client/shared/theme-switching.js +++ b/devtools/client/shared/theme-switching.js @@ -158,8 +158,8 @@ } const { classes: Cc, interfaces: Ci, utils: Cu } = Components; - Cu.import("resource://gre/modules/Services.jsm"); const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); + const Services = require("Services"); const { gDevTools } = require("devtools/client/framework/devtools"); const StylesheetUtils = require("sdk/stylesheet/utils"); const { watchCSS } = require("devtools/client/shared/css-reload"); diff --git a/devtools/client/shared/theme.js b/devtools/client/shared/theme.js index 68ccee368bef..29aa858c9699 100644 --- a/devtools/client/shared/theme.js +++ b/devtools/client/shared/theme.js @@ -11,7 +11,7 @@ const { Ci, Cu } = require("chrome"); const { NetUtil } = Cu.import("resource://gre/modules/NetUtil.jsm", {}); -loader.lazyRequireGetter(this, "Services"); +const Services = require("Services"); const { gDevTools } = require("devtools/client/framework/devtools"); const VARIABLES_URI = "chrome://devtools/skin/variables.css"; diff --git a/devtools/client/shared/view-source.js b/devtools/client/shared/view-source.js index 09caa67d2e3c..bd4156b903ee 100644 --- a/devtools/client/shared/view-source.js +++ b/devtools/client/shared/view-source.js @@ -4,9 +4,9 @@ "use strict"; -loader.lazyRequireGetter(this, "Services"); loader.lazyImporter(this, "Task", "resource://gre/modules/Task.jsm"); +var Services = require("Services"); var {gDevTools} = require("devtools/client/framework/devtools"); var DevToolsUtils = require("devtools/shared/DevToolsUtils"); diff --git a/devtools/client/shared/widgets/MdnDocsWidget.js b/devtools/client/shared/widgets/MdnDocsWidget.js index 7035a29a8f57..d53da26888a6 100644 --- a/devtools/client/shared/widgets/MdnDocsWidget.js +++ b/devtools/client/shared/widgets/MdnDocsWidget.js @@ -25,7 +25,7 @@ "use strict"; const {Cc, Cu, Ci} = require("chrome"); -Cu.import("resource://gre/modules/Services.jsm"); +const Services = require("Services"); const Promise = require("promise"); const DOMUtils = Cc["@mozilla.org/inspector/dom-utils;1"] .getService(Ci.inIDOMUtils); diff --git a/devtools/client/shared/widgets/Tooltip.js b/devtools/client/shared/widgets/Tooltip.js index f2355ea61ed4..e48ecb46f4bf 100644 --- a/devtools/client/shared/widgets/Tooltip.js +++ b/devtools/client/shared/widgets/Tooltip.js @@ -16,10 +16,10 @@ const {colorUtils} = require("devtools/shared/css-color"); const Heritage = require("sdk/core/heritage"); const {Eyedropper} = require("devtools/client/eyedropper/eyedropper"); const Editor = require("devtools/client/sourceeditor/editor"); +const Services = require("Services"); loader.lazyRequireGetter(this, "beautify", "devtools/shared/jsbeautify/beautify"); -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "setNamedTimeout", diff --git a/devtools/client/shared/widgets/VariablesView.jsm b/devtools/client/shared/widgets/VariablesView.jsm index 1dfd7a359abc..7dfdafe0cc16 100644 --- a/devtools/client/shared/widgets/VariablesView.jsm +++ b/devtools/client/shared/widgets/VariablesView.jsm @@ -17,13 +17,13 @@ const PAGE_SIZE_MAX_JUMPS = 30; const SEARCH_ACTION_MAX_DELAY = 300; // ms const ITEM_FLASH_DURATION = 300 // ms -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://devtools/client/shared/widgets/ViewHelpers.jsm"); Cu.import("resource://devtools/shared/event-emitter.js"); Cu.import("resource://gre/modules/Task.jsm"); const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); const DevToolsUtils = require("devtools/shared/DevToolsUtils"); +const Services = require("Services"); const promise = require("promise"); XPCOMUtils.defineLazyModuleGetter(this, "PluralForm", diff --git a/devtools/client/shared/widgets/VariablesViewController.jsm b/devtools/client/shared/widgets/VariablesViewController.jsm index 6b2c8b09c538..764d736b3f4d 100644 --- a/devtools/client/shared/widgets/VariablesViewController.jsm +++ b/devtools/client/shared/widgets/VariablesViewController.jsm @@ -7,11 +7,11 @@ const { classes: Cc, interfaces: Ci, utils: Cu } = Components; -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://devtools/client/shared/widgets/VariablesView.jsm"); Cu.import("resource://devtools/client/shared/widgets/ViewHelpers.jsm"); var {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); +var Services = require("Services"); var promise = require("promise"); Object.defineProperty(this, "WebConsoleUtils", { diff --git a/devtools/client/shared/widgets/ViewHelpers.jsm b/devtools/client/shared/widgets/ViewHelpers.jsm index 7d1601adb59f..4dd84c6e6536 100644 --- a/devtools/client/shared/widgets/ViewHelpers.jsm +++ b/devtools/client/shared/widgets/ViewHelpers.jsm @@ -13,10 +13,10 @@ const PANE_APPEARANCE_DELAY = 50; const PAGE_SIZE_ITEM_COUNT_RATIO = 5; const WIDGET_FOCUSABLE_NODES = new Set(["vbox", "hbox"]); -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Timer.jsm"); const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); +const Services = require("Services"); const DevToolsUtils = require("devtools/shared/DevToolsUtils"); Cu.import("resource://devtools/shared/event-emitter.js"); diff --git a/devtools/client/shims/gDevTools.jsm b/devtools/client/shims/gDevTools.jsm index 0bdf45633f60..12cf7edf30a9 100644 --- a/devtools/client/shims/gDevTools.jsm +++ b/devtools/client/shims/gDevTools.jsm @@ -11,7 +11,7 @@ const Cu = Components.utils; -const { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); +const Services = require("Services"); const WARNING_PREF = "devtools.migration.warnings"; if (Services.prefs.getBoolPref(WARNING_PREF)) { diff --git a/devtools/client/sourceeditor/editor.js b/devtools/client/sourceeditor/editor.js index a29fdeb0d7d1..62ce48884966 100644 --- a/devtools/client/sourceeditor/editor.js +++ b/devtools/client/sourceeditor/editor.js @@ -32,11 +32,11 @@ const MAX_VERTICAL_OFFSET = 3; const RE_SCRATCHPAD_ERROR = /(?:@Scratchpad\/\d+:|\()(\d+):?(\d+)?(?:\)|\n)/; const RE_JUMP_TO_LINE = /^(\d+):?(\d+)?/; +const Services = require("Services"); const promise = require("promise"); const events = require("devtools/shared/event-emitter"); const { PrefObserver } = require("devtools/client/styleeditor/utils"); -Cu.import("resource://gre/modules/Services.jsm"); const L10N = Services.strings.createBundle(L10N_BUNDLE); const { OS } = Services.appinfo; diff --git a/devtools/client/styleeditor/StyleEditorUtil.jsm b/devtools/client/styleeditor/StyleEditorUtil.jsm index b85eec4175ad..829e454364ee 100644 --- a/devtools/client/styleeditor/StyleEditorUtil.jsm +++ b/devtools/client/styleeditor/StyleEditorUtil.jsm @@ -21,11 +21,10 @@ const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; -Cu.import("resource://gre/modules/Services.jsm"); - const PROPERTIES_URL = "chrome://devtools/locale/styleeditor.properties"; const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); +const Services = require("Services"); const console = require("resource://gre/modules/Console.jsm").console; const gStringBundle = Services.strings.createBundle(PROPERTIES_URL); diff --git a/devtools/client/styleeditor/StyleSheetEditor.jsm b/devtools/client/styleeditor/StyleSheetEditor.jsm index 1d40ec576c73..4f761c6afded 100644 --- a/devtools/client/styleeditor/StyleSheetEditor.jsm +++ b/devtools/client/styleeditor/StyleSheetEditor.jsm @@ -16,8 +16,8 @@ const Editor = require("devtools/client/sourceeditor/editor"); const promise = require("promise"); const {CssLogic} = require("devtools/shared/inspector/css-logic"); const {console} = require("resource://gre/modules/Console.jsm"); +const Services = require("Services"); -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/FileUtils.jsm"); Cu.import("resource://gre/modules/NetUtil.jsm"); const { TextDecoder, OS } = Cu.import("resource://gre/modules/osfile.jsm", {}); diff --git a/devtools/client/styleeditor/styleeditor-panel.js b/devtools/client/styleeditor/styleeditor-panel.js index fc7b829d42f2..eed46e955237 100644 --- a/devtools/client/styleeditor/styleeditor-panel.js +++ b/devtools/client/styleeditor/styleeditor-panel.js @@ -9,8 +9,8 @@ const {Cu} = require("chrome"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); +var Services = require("Services"); var promise = require("promise"); var EventEmitter = require("devtools/shared/event-emitter"); diff --git a/devtools/client/styleeditor/utils.js b/devtools/client/styleeditor/utils.js index df86ed54fb83..b2ec22e60d6c 100644 --- a/devtools/client/styleeditor/utils.js +++ b/devtools/client/styleeditor/utils.js @@ -7,8 +7,8 @@ "use strict"; const {Cu} = require("chrome"); +const Services = require("Services"); -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://devtools/shared/event-emitter.js"); exports.PREF_ORIG_SOURCES = "devtools.styleeditor.source-maps-enabled"; diff --git a/devtools/client/tilt/tilt-gl.js b/devtools/client/tilt/tilt-gl.js index a809fd407199..7ada86b7f08b 100644 --- a/devtools/client/tilt/tilt-gl.js +++ b/devtools/client/tilt/tilt-gl.js @@ -9,8 +9,7 @@ const {Cc, Ci, Cu} = require("chrome"); var TiltUtils = require("devtools/client/tilt/tilt-utils"); var {TiltMath, mat4} = require("devtools/client/tilt/tilt-math"); - -Cu.import("resource://gre/modules/Services.jsm"); +var Services = require("Services"); const WEBGL_CONTEXT_NAME = "experimental-webgl"; diff --git a/devtools/client/tilt/tilt-utils.js b/devtools/client/tilt/tilt-utils.js index 43c070a1214e..8e593e67798d 100644 --- a/devtools/client/tilt/tilt-utils.js +++ b/devtools/client/tilt/tilt-utils.js @@ -7,8 +7,8 @@ const {Cc, Ci, Cu} = require("chrome"); const {getRect} = require("devtools/shared/layout/utils"); +const Services = require("Services"); -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); const STACK_THICKNESS = 15; diff --git a/devtools/client/tilt/tilt-visualizer.js b/devtools/client/tilt/tilt-visualizer.js index 5eb9b4ef4afb..eae44566e97a 100644 --- a/devtools/client/tilt/tilt-visualizer.js +++ b/devtools/client/tilt/tilt-visualizer.js @@ -7,13 +7,12 @@ const {Cu, Ci, ChromeWorker} = require("chrome"); +var Services = require("Services"); var TiltGL = require("devtools/client/tilt/tilt-gl"); var TiltUtils = require("devtools/client/tilt/tilt-utils"); var TiltVisualizerStyle = require("devtools/client/tilt/tilt-visualizer-style"); var {EPSILON, TiltMath, vec3, mat4, quat4} = require("devtools/client/tilt/tilt-math"); var {TargetFactory} = require("devtools/client/framework/target"); - -Cu.import("resource://gre/modules/Services.jsm"); var {gDevTools} = require("devtools/client/framework/devtools"); const ELEMENT_MIN_SIZE = 4; diff --git a/devtools/client/tilt/tilt.js b/devtools/client/tilt/tilt.js index 308a3d12251e..b976f9e28c90 100644 --- a/devtools/client/tilt/tilt.js +++ b/devtools/client/tilt/tilt.js @@ -12,8 +12,7 @@ var TiltGL = require("devtools/client/tilt/tilt-gl"); var TiltUtils = require("devtools/client/tilt/tilt-utils"); var EventEmitter = require("devtools/shared/event-emitter"); var Telemetry = require("devtools/client/shared/telemetry"); - -Cu.import("resource://gre/modules/Services.jsm"); +var Services = require("Services"); // Tilt notifications dispatched through the nsIObserverService. const TILT_NOTIFICATIONS = { diff --git a/devtools/client/webaudioeditor/includes.js b/devtools/client/webaudioeditor/includes.js index 047b7a8a55a8..d8b22f01d133 100644 --- a/devtools/client/webaudioeditor/includes.js +++ b/devtools/client/webaudioeditor/includes.js @@ -5,7 +5,6 @@ var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://devtools/client/shared/widgets/ViewHelpers.jsm"); @@ -22,6 +21,7 @@ const L10N = new ViewHelpers.L10N(STRINGS_URI); const Telemetry = require("devtools/client/shared/telemetry"); const telemetry = new Telemetry(); const DevToolsUtils = require("devtools/shared/DevToolsUtils"); +const Services = require("Services"); const { gDevTools } = require("devtools/client/framework/devtools"); loader.lazyRequireGetter(this, "LineGraphWidget", diff --git a/devtools/client/webaudioeditor/test/head.js b/devtools/client/webaudioeditor/test/head.js index c9c41245ecfa..629e0880893b 100644 --- a/devtools/client/webaudioeditor/test/head.js +++ b/devtools/client/webaudioeditor/test/head.js @@ -4,21 +4,16 @@ var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; -var { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); - -// Enable logging for all the tests. Both the debugger server and frontend will -// be affected by this pref. -var gEnableLogging = Services.prefs.getBoolPref("devtools.debugger.log"); -Services.prefs.setBoolPref("devtools.debugger.log", false); - var { Task } = Cu.import("resource://gre/modules/Task.jsm", {}); var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); +var Services = require("Services"); var { gDevTools } = require("devtools/client/framework/devtools"); var { TargetFactory } = require("devtools/client/framework/target"); var { DebuggerServer } = require("devtools/server/main"); var { generateUUID } = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator); var Promise = require("promise"); +var Services = require("Services"); var { WebAudioFront } = require("devtools/server/actors/webaudio"); var DevToolsUtils = require("devtools/shared/DevToolsUtils"); var audioNodes = require("devtools/server/actors/utils/audionodes.json"); @@ -37,6 +32,11 @@ const CONNECT_MULTI_PARAM_URL = EXAMPLE_URL + "doc_connect-multi-param.html"; const IFRAME_CONTEXT_URL = EXAMPLE_URL + "doc_iframe-context.html"; const AUTOMATION_URL = EXAMPLE_URL + "doc_automation.html"; +// Enable logging for all the tests. Both the debugger server and frontend will +// be affected by this pref. +var gEnableLogging = Services.prefs.getBoolPref("devtools.debugger.log"); +Services.prefs.setBoolPref("devtools.debugger.log", false); + // All tests are asynchronous. waitForExplicitFinish(); diff --git a/devtools/client/webconsole/console-output.js b/devtools/client/webconsole/console-output.js index 2895c108e6a3..9b8c90f6d13a 100644 --- a/devtools/client/webconsole/console-output.js +++ b/devtools/client/webconsole/console-output.js @@ -8,7 +8,7 @@ const {Cc, Ci, Cu} = require("chrome"); -const { Services } = require("resource://gre/modules/Services.jsm"); +const Services = require("Services"); loader.lazyImporter(this, "VariablesView", "resource://devtools/client/shared/widgets/VariablesView.jsm"); loader.lazyImporter(this, "escapeHTML", "resource://devtools/client/shared/widgets/VariablesView.jsm"); diff --git a/devtools/client/webconsole/hudservice.js b/devtools/client/webconsole/hudservice.js index 2386e9cbcf59..7bc7d42302c7 100644 --- a/devtools/client/webconsole/hudservice.js +++ b/devtools/client/webconsole/hudservice.js @@ -14,8 +14,8 @@ var {TargetFactory} = require("devtools/client/framework/target"); var {Tools} = require("devtools/client/definitions"); const { Task } = require("resource://gre/modules/Task.jsm"); var promise = require("promise"); +var Services = require("Services"); -loader.lazyImporter(this, "Services", "resource://gre/modules/Services.jsm"); loader.lazyRequireGetter(this, "Telemetry", "devtools/client/shared/telemetry"); loader.lazyRequireGetter(this, "WebConsoleFrame", "devtools/client/webconsole/webconsole", true); loader.lazyRequireGetter(this, "gDevTools", "devtools/client/framework/devtools", true); diff --git a/devtools/client/webconsole/jsterm.js b/devtools/client/webconsole/jsterm.js index e39c03facf7c..a4b37c2317cc 100644 --- a/devtools/client/webconsole/jsterm.js +++ b/devtools/client/webconsole/jsterm.js @@ -12,11 +12,11 @@ const {Utils: WebConsoleUtils, CONSOLE_WORKER_IDS} = require("devtools/shared/webconsole/utils"); const promise = require("promise"); const Debugger = require("Debugger"); +const Services = require("Services"); loader.lazyServiceGetter(this, "clipboardHelper", "@mozilla.org/widget/clipboardhelper;1", "nsIClipboardHelper"); -loader.lazyImporter(this, "Services", "resource://gre/modules/Services.jsm"); loader.lazyRequireGetter(this, "EventEmitter", "devtools/shared/event-emitter"); loader.lazyRequireGetter(this, "AutocompletePopup", "devtools/client/shared/autocomplete-popup", true); loader.lazyRequireGetter(this, "ToolSidebar", "devtools/client/framework/sidebar", true); diff --git a/devtools/client/webconsole/webconsole.js b/devtools/client/webconsole/webconsole.js index cf0a65630b68..0d7151989fc6 100644 --- a/devtools/client/webconsole/webconsole.js +++ b/devtools/client/webconsole/webconsole.js @@ -11,11 +11,12 @@ const {Cc, Ci, Cu} = require("chrome"); const {Utils: WebConsoleUtils, CONSOLE_WORKER_IDS} = require("devtools/shared/webconsole/utils"); const promise = require("promise"); +const Debugger = require("Debugger"); +const Services = require("Services"); loader.lazyServiceGetter(this, "clipboardHelper", "@mozilla.org/widget/clipboardhelper;1", "nsIClipboardHelper"); -loader.lazyImporter(this, "Services", "resource://gre/modules/Services.jsm"); loader.lazyRequireGetter(this, "EventEmitter", "devtools/shared/event-emitter"); loader.lazyRequireGetter(this, "AutocompletePopup", "devtools/client/shared/autocomplete-popup", true); loader.lazyRequireGetter(this, "ToolSidebar", "devtools/client/framework/sidebar", true); diff --git a/devtools/client/webide/content/addons.js b/devtools/client/webide/content/addons.js index 74087e19ae57..65d546c8f398 100644 --- a/devtools/client/webide/content/addons.js +++ b/devtools/client/webide/content/addons.js @@ -3,8 +3,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ var Cu = Components.utils; -const {Services} = Cu.import("resource://gre/modules/Services.jsm"); const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); +const Services = require("Services"); const {GetAvailableAddons, ForgetAddonsList} = require("devtools/client/webide/modules/addons"); const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties"); diff --git a/devtools/client/webide/content/details.js b/devtools/client/webide/content/details.js index d59e8cd05bd3..9097cd8c5fd1 100644 --- a/devtools/client/webide/content/details.js +++ b/devtools/client/webide/content/details.js @@ -3,8 +3,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ var Cu = Components.utils; -const {Services} = Cu.import("resource://gre/modules/Services.jsm"); const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); +const Services = require("Services"); const {AppManager} = require("devtools/client/webide/modules/app-manager"); const {ProjectBuilding} = require("devtools/client/webide/modules/build"); diff --git a/devtools/client/webide/content/monitor.js b/devtools/client/webide/content/monitor.js index 99b90da678e6..271ec5f41a4f 100644 --- a/devtools/client/webide/content/monitor.js +++ b/devtools/client/webide/content/monitor.js @@ -4,7 +4,7 @@ var Cu = Components.utils; const {require} = Cu.import('resource://devtools/shared/Loader.jsm', {}); -const {Services} = Cu.import('resource://gre/modules/Services.jsm'); +const Services = require('Services'); const {AppManager} = require('devtools/client/webide/modules/app-manager'); const {AppActorFront} = require('devtools/shared/apps/app-actor-front'); const {Connection} = require('devtools/shared/client/connection-manager'); diff --git a/devtools/client/webide/content/newapp.js b/devtools/client/webide/content/newapp.js index edca080b2fc3..9719497a3314 100644 --- a/devtools/client/webide/content/newapp.js +++ b/devtools/client/webide/content/newapp.js @@ -6,13 +6,13 @@ var Cc = Components.classes; var Cu = Components.utils; var Ci = Components.interfaces; -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "ZipUtils", "resource://gre/modules/ZipUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "Downloads", "resource://gre/modules/Downloads.jsm"); const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); +const Services = require("Services"); const {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm", {}); const {AppProjects} = require("devtools/client/webide/modules/app-projects"); const {AppManager} = require("devtools/client/webide/modules/app-manager"); diff --git a/devtools/client/webide/content/permissionstable.js b/devtools/client/webide/content/permissionstable.js index f8820a2a5823..2db082085322 100644 --- a/devtools/client/webide/content/permissionstable.js +++ b/devtools/client/webide/content/permissionstable.js @@ -3,8 +3,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ var Cu = Components.utils; -const {Services} = Cu.import("resource://gre/modules/Services.jsm"); const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); +const Services = require("Services"); const {AppManager} = require("devtools/client/webide/modules/app-manager"); const {Connection} = require("devtools/shared/client/connection-manager"); diff --git a/devtools/client/webide/content/runtimedetails.js b/devtools/client/webide/content/runtimedetails.js index cb8b55324cfa..b7f916c77758 100644 --- a/devtools/client/webide/content/runtimedetails.js +++ b/devtools/client/webide/content/runtimedetails.js @@ -3,8 +3,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ var Cu = Components.utils; -const {Services} = Cu.import("resource://gre/modules/Services.jsm"); const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); +const Services = require("Services"); const {AppManager} = require("devtools/client/webide/modules/app-manager"); const {Connection} = require("devtools/shared/client/connection-manager"); const {RuntimeTypes} = require("devtools/client/webide/modules/runtimes"); diff --git a/devtools/client/webide/content/simulator.js b/devtools/client/webide/content/simulator.js index ae447b1b3f30..4f429ccc45e0 100644 --- a/devtools/client/webide/content/simulator.js +++ b/devtools/client/webide/content/simulator.js @@ -7,8 +7,8 @@ var Ci = Components.interfaces; const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); const { GetDevices, GetDeviceString } = require("devtools/client/shared/devices"); -const { Services } = Cu.import("resource://gre/modules/Services.jsm"); const { Simulators, Simulator } = require("devtools/client/webide/modules/simulators"); +const Services = require("Services"); const EventEmitter = require('devtools/shared/event-emitter'); const promise = require("promise"); const utils = require("devtools/client/webide/modules/utils"); diff --git a/devtools/client/webide/content/wifi-auth.js b/devtools/client/webide/content/wifi-auth.js index c387079e2d84..5ae5d824c399 100644 --- a/devtools/client/webide/content/wifi-auth.js +++ b/devtools/client/webide/content/wifi-auth.js @@ -5,9 +5,9 @@ "use strict"; var Cu = Components.utils; -const { Services } = Cu.import("resource://gre/modules/Services.jsm"); const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); +const Services = require("Services"); const QR = require("devtools/shared/qrcode/index"); window.addEventListener("load", function onLoad() { diff --git a/devtools/client/webide/modules/addons.js b/devtools/client/webide/modules/addons.js index cd18a86dcd7e..a3cbec5f5f1a 100644 --- a/devtools/client/webide/modules/addons.js +++ b/devtools/client/webide/modules/addons.js @@ -5,7 +5,7 @@ const {Cu} = require("chrome"); const promise = require("promise"); const {AddonManager} = Cu.import("resource://gre/modules/AddonManager.jsm"); -const {Services} = Cu.import("resource://gre/modules/Services.jsm"); +const Services = require("Services"); const {getJSON} = require("devtools/client/shared/getjson"); const EventEmitter = require("devtools/shared/event-emitter"); diff --git a/devtools/client/webide/modules/config-view.js b/devtools/client/webide/modules/config-view.js index 445bbe424588..4c3624458b04 100644 --- a/devtools/client/webide/modules/config-view.js +++ b/devtools/client/webide/modules/config-view.js @@ -5,7 +5,7 @@ const {Cu} = require("chrome"); const EventEmitter = require("devtools/shared/event-emitter"); -const {Services} = Cu.import("resource://gre/modules/Services.jsm"); +const Services = require("Services"); const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties"); var ConfigView; diff --git a/devtools/client/webide/modules/runtime-list.js b/devtools/client/webide/modules/runtime-list.js index f1b8caca6135..72af24c41cc4 100644 --- a/devtools/client/webide/modules/runtime-list.js +++ b/devtools/client/webide/modules/runtime-list.js @@ -4,7 +4,7 @@ const {Cu} = require("chrome"); -const {Services} = Cu.import("resource://gre/modules/Services.jsm"); +const Services = require("Services"); const {AppManager} = require("devtools/client/webide/modules/app-manager"); const EventEmitter = require("devtools/shared/event-emitter"); const {RuntimeScanners, WiFiScanner} = require("devtools/client/webide/modules/runtimes"); diff --git a/devtools/client/webide/modules/runtimes.js b/devtools/client/webide/modules/runtimes.js index a5006dacd60a..48a501d3ef56 100644 --- a/devtools/client/webide/modules/runtimes.js +++ b/devtools/client/webide/modules/runtimes.js @@ -3,8 +3,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ const {Cu, Ci} = require("chrome"); +const Services = require("Services"); const {Devices} = Cu.import("resource://devtools/shared/apps/Devices.jsm"); -const {Services} = Cu.import("resource://gre/modules/Services.jsm"); const {Connection} = require("devtools/shared/client/connection-manager"); const {DebuggerServer} = require("devtools/server/main"); const {Simulators} = require("devtools/client/webide/modules/simulators"); diff --git a/devtools/client/webide/modules/simulator-process.js b/devtools/client/webide/modules/simulator-process.js index 7d9afc528e97..8d6bc5e2d84f 100644 --- a/devtools/client/webide/modules/simulator-process.js +++ b/devtools/client/webide/modules/simulator-process.js @@ -11,7 +11,7 @@ const Environment = require("sdk/system/environment").env; const EventEmitter = require("devtools/shared/event-emitter"); const promise = require("promise"); const Subprocess = require("sdk/system/child_process/subprocess"); -const { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); +const Services = require("Services"); loader.lazyGetter(this, "OS", () => { const Runtime = require("sdk/system/runtime"); diff --git a/devtools/client/webide/modules/utils.js b/devtools/client/webide/modules/utils.js index 645fe53c0952..26b07ab5441f 100644 --- a/devtools/client/webide/modules/utils.js +++ b/devtools/client/webide/modules/utils.js @@ -4,7 +4,7 @@ const { Cc, Cu, Ci } = require("chrome"); const { FileUtils } = Cu.import("resource://gre/modules/FileUtils.jsm", {}); -const { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); +const Services = require("Services"); const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties"); function doesFileExist (location) { diff --git a/devtools/client/webide/test/head.js b/devtools/client/webide/test/head.js index 1e7ecc7902d2..8e8af310dbdf 100644 --- a/devtools/client/webide/test/head.js +++ b/devtools/client/webide/test/head.js @@ -5,13 +5,13 @@ var {utils: Cu, classes: Cc, interfaces: Ci} = Components; -Cu.import('resource://gre/modules/Services.jsm'); Cu.import("resource://gre/modules/FileUtils.jsm"); Cu.import("resource://gre/modules/Task.jsm"); const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); const {gDevTools} = require("devtools/client/framework/devtools"); const promise = require("promise"); +const Services = require("Services"); const {AppProjects} = require("devtools/client/webide/modules/app-projects"); const DevToolsUtils = require("devtools/shared/DevToolsUtils"); DevToolsUtils.testing = true; diff --git a/devtools/client/webide/test/test_app_validator.html b/devtools/client/webide/test/test_app_validator.html index a63cd8f487d3..60ed29aac937 100644 --- a/devtools/client/webide/test/test_app_validator.html +++ b/devtools/client/webide/test/test_app_validator.html @@ -21,7 +21,7 @@ const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); const {AppValidator} = require("devtools/client/webide/modules/app-validator"); - const {Services} = Cu.import("resource://gre/modules/Services.jsm"); + const Services = require("Services"); const nsFile = Components.Constructor("@mozilla.org/file/local;1", "nsILocalFile", "initWithPath"); const cr = Cc["@mozilla.org/chrome/chrome-registry;1"] diff --git a/devtools/server/actors/preference.js b/devtools/server/actors/preference.js index bd0939f05f04..9350e276bd8d 100644 --- a/devtools/server/actors/preference.js +++ b/devtools/server/actors/preference.js @@ -5,8 +5,7 @@ const {Cc, Ci, Cu, CC} = require("chrome"); const protocol = require("devtools/server/protocol"); const {Arg, method, RetVal} = protocol; - -Cu.import("resource://gre/modules/Services.jsm"); +const Services = require("Services"); exports.register = function(handle) { handle.addGlobalActor(PreferenceActor, "preferenceActor"); diff --git a/devtools/server/actors/settings.js b/devtools/server/actors/settings.js index adf61b3b14ff..885e0321681d 100644 --- a/devtools/server/actors/settings.js +++ b/devtools/server/actors/settings.js @@ -7,10 +7,10 @@ const protocol = require("devtools/server/protocol"); const {Arg, method, RetVal} = protocol; const {DebuggerServer} = require("devtools/server/main"); const promise = require("promise"); +const Services = require("Services"); Cu.import("resource://gre/modules/FileUtils.jsm"); Cu.import("resource://gre/modules/NetUtil.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); var defaultSettings = {}; var settingsFile; diff --git a/devtools/server/tests/browser/head.js b/devtools/server/tests/browser/head.js index db8130026aa9..6e4fd52a0cd5 100644 --- a/devtools/server/tests/browser/head.js +++ b/devtools/server/tests/browser/head.js @@ -6,13 +6,13 @@ var Cc = Components.classes; var Ci = Components.interfaces; var Cu = Components.utils; -Cu.import("resource://gre/modules/Services.jsm"); const {console} = Cu.import("resource://gre/modules/Console.jsm", {}); const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); const {DebuggerClient} = require("devtools/shared/client/main"); const {DebuggerServer} = require("devtools/server/main"); const {defer} = require("promise"); const DevToolsUtils = require("devtools/shared/DevToolsUtils"); +const Services = require("Services"); const PATH = "browser/devtools/server/tests/browser/"; const MAIN_DOMAIN = "http://test1.example.org/" + PATH; diff --git a/devtools/server/tests/mochitest/memory-helpers.js b/devtools/server/tests/mochitest/memory-helpers.js index df8203aa0707..36876b9fe3bb 100644 --- a/devtools/server/tests/mochitest/memory-helpers.js +++ b/devtools/server/tests/mochitest/memory-helpers.js @@ -2,7 +2,13 @@ var Cu = Components.utils; var Cc = Components.classes; var Ci = Components.interfaces; -Cu.import("resource://gre/modules/Services.jsm"); +Cu.import("resource://gre/modules/Task.jsm"); +var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); +var Services = require("Services"); +var { DebuggerClient } = require("devtools/shared/client/main"); +var { DebuggerServer } = require("devtools/server/main"); + +var { MemoryFront } = require("devtools/server/actors/memory"); // Always log packets when running tests. Services.prefs.setBoolPref("devtools.debugger.log", true); @@ -10,13 +16,6 @@ SimpleTest.registerCleanupFunction(function() { Services.prefs.clearUserPref("devtools.debugger.log"); }); -Cu.import("resource://gre/modules/Task.jsm"); -var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); -var { DebuggerClient } = require("devtools/shared/client/main"); -var { DebuggerServer } = require("devtools/server/main"); - -var { MemoryFront } = require("devtools/server/actors/memory"); - function startServerAndGetSelectedTabMemory() { DebuggerServer.init(); DebuggerServer.addBrowserActors(); diff --git a/devtools/server/tests/mochitest/memprof-helpers.js b/devtools/server/tests/mochitest/memprof-helpers.js index 33187e0bbe46..c61a0603d813 100644 --- a/devtools/server/tests/mochitest/memprof-helpers.js +++ b/devtools/server/tests/mochitest/memprof-helpers.js @@ -2,7 +2,14 @@ var Cu = Components.utils; var Cc = Components.classes; var Ci = Components.interfaces; -var { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); +var { Task } = Cu.import("resource://gre/modules/Task.jsm", {}); +var { require } = + Cu.import("resource://devtools/shared/Loader.jsm", {}); + +var Services = require("Services"); +var { DebuggerClient } = require("devtools/shared/client/main"); +var { DebuggerServer } = require("devtools/server/main"); +var { MemprofFront } = require("devtools/server/actors/memprof"); // Always log packets when running tests. Services.prefs.setBoolPref("devtools.debugger.log", true); @@ -10,14 +17,6 @@ SimpleTest.registerCleanupFunction(function() { Services.prefs.clearUserPref("devtools.debugger.log"); }); -var { Task } = Cu.import("resource://gre/modules/Task.jsm", {}); -var { require } = - Cu.import("resource://devtools/shared/Loader.jsm", {}); - -var { DebuggerClient } = require("devtools/shared/client/main"); -var { DebuggerServer } = require("devtools/server/main"); -var { MemprofFront } = require("devtools/server/actors/memprof"); - function startServerAndGetSelectedTabMemprof() { DebuggerServer.init(); DebuggerServer.addBrowserActors(); diff --git a/devtools/server/tests/mochitest/test_connection-manager.html b/devtools/server/tests/mochitest/test_connection-manager.html index 7edb9dc6949e..bc802f933133 100644 --- a/devtools/server/tests/mochitest/test_connection-manager.html +++ b/devtools/server/tests/mochitest/test_connection-manager.html @@ -20,7 +20,7 @@ window.onload = function() { var {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); var {DebuggerServer} = require("devtools/server/main"); - Cu.import("resource://gre/modules/Services.jsm"); + var Services = require("Services"); if (!DebuggerServer.initialized) { DebuggerServer.init(); diff --git a/devtools/server/tests/mochitest/test_css-logic-inheritance.html b/devtools/server/tests/mochitest/test_css-logic-inheritance.html index ea43bd571824..784395c1b937 100644 --- a/devtools/server/tests/mochitest/test_css-logic-inheritance.html +++ b/devtools/server/tests/mochitest/test_css-logic-inheritance.html @@ -19,7 +19,7 @@ Test that css-logic handles inherited properties correctly var Cu = Components.utils; const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); - Cu.import("resource://gre/modules/Services.jsm"); + var Services = require("Services"); const {CssLogic} = require("devtools/shared/inspector/css-logic"); SimpleTest.waitForExplicitFinish(); diff --git a/devtools/server/tests/mochitest/test_css-logic-media-queries.html b/devtools/server/tests/mochitest/test_css-logic-media-queries.html index 5689031167c7..57c129f168d2 100644 --- a/devtools/server/tests/mochitest/test_css-logic-media-queries.html +++ b/devtools/server/tests/mochitest/test_css-logic-media-queries.html @@ -30,7 +30,7 @@ Test that css-logic handles media-queries correctly var Cu = Components.utils; var {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); - Cu.import("resource://gre/modules/Services.jsm"); + var Services = require("Services"); const {CssLogic} = require("devtools/shared/inspector/css-logic"); SimpleTest.waitForExplicitFinish(); diff --git a/devtools/server/tests/mochitest/test_device.html b/devtools/server/tests/mochitest/test_device.html index 3722d5ba6eb2..7ff2b8b4bf9e 100644 --- a/devtools/server/tests/mochitest/test_device.html +++ b/devtools/server/tests/mochitest/test_device.html @@ -22,7 +22,7 @@ window.onload = function() { var {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); var {DebuggerClient} = require("devtools/shared/client/main"); var {DebuggerServer} = require("devtools/server/main"); - Cu.import("resource://gre/modules/Services.jsm"); + var Services = require("Services"); SimpleTest.waitForExplicitFinish(); diff --git a/devtools/server/tests/mochitest/test_framerate_01.html b/devtools/server/tests/mochitest/test_framerate_01.html index 1323e3a20ec9..fbee0b9ba88a 100644 --- a/devtools/server/tests/mochitest/test_framerate_01.html +++ b/devtools/server/tests/mochitest/test_framerate_01.html @@ -18,7 +18,10 @@ window.onload = function() { var Cc = Components.classes; var Ci = Components.interfaces; - Cu.import("resource://gre/modules/Services.jsm"); + var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); + var Services = require("Services"); + var { DebuggerClient } = require("devtools/shared/client/main"); + var { DebuggerServer } = require("devtools/server/main"); // Always log packets when running tests. Services.prefs.setBoolPref("devtools.debugger.log", true); @@ -26,10 +29,6 @@ window.onload = function() { Services.prefs.clearUserPref("devtools.debugger.log"); }); - var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); - var { DebuggerClient } = require("devtools/shared/client/main"); - var { DebuggerServer } = require("devtools/server/main"); - SimpleTest.waitForExplicitFinish(); var {FramerateFront} = require("devtools/server/actors/framerate"); diff --git a/devtools/server/tests/mochitest/test_framerate_02.html b/devtools/server/tests/mochitest/test_framerate_02.html index c9ea9ce5415d..fb3a04f96480 100644 --- a/devtools/server/tests/mochitest/test_framerate_02.html +++ b/devtools/server/tests/mochitest/test_framerate_02.html @@ -18,7 +18,10 @@ window.onload = function() { var Cc = Components.classes; var Ci = Components.interfaces; - Cu.import("resource://gre/modules/Services.jsm"); + var {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); + var {DebuggerClient} = require("devtools/shared/client/main"); + var {DebuggerServer} = require("devtools/server/main"); + var Services = require("Services"); // Always log packets when running tests. Services.prefs.setBoolPref("devtools.debugger.log", true); @@ -26,10 +29,6 @@ window.onload = function() { Services.prefs.clearUserPref("devtools.debugger.log"); }); - var {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); - var {DebuggerClient} = require("devtools/shared/client/main"); - var {DebuggerServer} = require("devtools/server/main"); - SimpleTest.waitForExplicitFinish(); var {FramerateFront} = require("devtools/server/actors/framerate"); diff --git a/devtools/server/tests/mochitest/test_framerate_03.html b/devtools/server/tests/mochitest/test_framerate_03.html index 5c51fa2a39d0..7a41026897c9 100644 --- a/devtools/server/tests/mochitest/test_framerate_03.html +++ b/devtools/server/tests/mochitest/test_framerate_03.html @@ -18,7 +18,10 @@ window.onload = function() { var Cc = Components.classes; var Ci = Components.interfaces; - Cu.import("resource://gre/modules/Services.jsm"); + var {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); + var {DebuggerClient} = require("devtools/shared/client/main"); + var {DebuggerServer} = require("devtools/server/main"); + var Services = require("Services"); // Always log packets when running tests. Services.prefs.setBoolPref("devtools.debugger.log", true); @@ -26,10 +29,6 @@ window.onload = function() { Services.prefs.clearUserPref("devtools.debugger.log"); }); - var {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); - var {DebuggerClient} = require("devtools/shared/client/main"); - var {DebuggerServer} = require("devtools/server/main"); - SimpleTest.waitForExplicitFinish(); var {FramerateFront} = require("devtools/server/actors/framerate"); diff --git a/devtools/server/tests/mochitest/test_framerate_05.html b/devtools/server/tests/mochitest/test_framerate_05.html index afa7f146137d..a46e30826109 100644 --- a/devtools/server/tests/mochitest/test_framerate_05.html +++ b/devtools/server/tests/mochitest/test_framerate_05.html @@ -18,7 +18,10 @@ window.onload = function() { var Cc = Components.classes; var Ci = Components.interfaces; - Cu.import("resource://gre/modules/Services.jsm"); + var {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); + var {DebuggerClient} = require("devtools/shared/client/main"); + var {DebuggerServer} = require("devtools/server/main"); + var Services = require("Services"); // Always log packets when running tests. Services.prefs.setBoolPref("devtools.debugger.log", true); @@ -26,10 +29,6 @@ window.onload = function() { Services.prefs.clearUserPref("devtools.debugger.log"); }); - var {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); - var {DebuggerClient} = require("devtools/shared/client/main"); - var {DebuggerServer} = require("devtools/server/main"); - SimpleTest.waitForExplicitFinish(); var {FramerateFront} = require("devtools/server/actors/framerate"); diff --git a/devtools/server/tests/mochitest/test_preference.html b/devtools/server/tests/mochitest/test_preference.html index cdc78e10bb58..ee3071de6ff0 100644 --- a/devtools/server/tests/mochitest/test_preference.html +++ b/devtools/server/tests/mochitest/test_preference.html @@ -21,7 +21,7 @@ function runTests() { var {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); var {DebuggerClient} = require("devtools/shared/client/main"); var {DebuggerServer} = require("devtools/server/main"); - Cu.import("resource://gre/modules/Services.jsm"); + var Services = require("Services"); SimpleTest.waitForExplicitFinish(); diff --git a/devtools/server/tests/mochitest/test_setupInParentChild.html b/devtools/server/tests/mochitest/test_setupInParentChild.html index b9b18581f4b9..04686beba08c 100644 --- a/devtools/server/tests/mochitest/test_setupInParentChild.html +++ b/devtools/server/tests/mochitest/test_setupInParentChild.html @@ -17,10 +17,10 @@ let Cu = Components.utils; let Cc = Components.classes; let Ci = Components.interfaces; -Cu.import("resource://gre/modules/Services.jsm"); let {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); let {DebuggerClient} = require("devtools/shared/client/main"); let {DebuggerServer} = require("devtools/server/main"); +let Services = require("Services"); window.onload = function() { SimpleTest.waitForExplicitFinish(); diff --git a/devtools/shared/apps/app-actor-front.js b/devtools/shared/apps/app-actor-front.js index 24b96caf6fea..b7959c72c844 100644 --- a/devtools/shared/apps/app-actor-front.js +++ b/devtools/shared/apps/app-actor-front.js @@ -1,8 +1,8 @@ const {Ci, Cc, Cu, Cr} = require("chrome"); Cu.import("resource://gre/modules/osfile.jsm"); -const {Services} = Cu.import("resource://gre/modules/Services.jsm"); const {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm"); const {NetUtil} = Cu.import("resource://gre/modules/NetUtil.jsm"); +const Services = require("Services"); const promise = require("promise"); const DevToolsUtils = require("devtools/shared/DevToolsUtils"); const EventEmitter = require("devtools/shared/event-emitter"); diff --git a/devtools/shared/apps/tests/debugger-protocol-helper.js b/devtools/shared/apps/tests/debugger-protocol-helper.js index 36649d0b7578..33f59f623edb 100644 --- a/devtools/shared/apps/tests/debugger-protocol-helper.js +++ b/devtools/shared/apps/tests/debugger-protocol-helper.js @@ -8,8 +8,8 @@ var Cu = Components.utils; const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); const { DebuggerClient } = require("devtools/shared/client/main"); const { DebuggerServer } = require("devtools/server/main"); +const Services = require("Services"); const { FileUtils } = Cu.import("resource://gre/modules/FileUtils.jsm"); -const { Services } = Cu.import("resource://gre/modules/Services.jsm"); const { NetUtil } = Cu.import("resource://gre/modules/NetUtil.jsm"); var gClient, gActor; diff --git a/devtools/shared/apps/tests/unit/head_apps.js b/devtools/shared/apps/tests/unit/head_apps.js index 5a72d1ed908a..39a176f1a3c3 100644 --- a/devtools/shared/apps/tests/unit/head_apps.js +++ b/devtools/shared/apps/tests/unit/head_apps.js @@ -7,10 +7,10 @@ var Cu = Components.utils; var Cr = Components.results; var CC = Components.Constructor; -Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/FileUtils.jsm"); const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); +const Services = require("Services"); const {DebuggerClient} = require("devtools/shared/client/main"); const {DebuggerServer} = require("devtools/server/main"); const {AppActorFront} = require("devtools/shared/apps/app-actor-front"); diff --git a/devtools/shared/client/connection-manager.js b/devtools/shared/client/connection-manager.js index ae982ab7ec75..f1a7f1118268 100644 --- a/devtools/shared/client/connection-manager.js +++ b/devtools/shared/client/connection-manager.js @@ -12,8 +12,8 @@ const EventEmitter = require("devtools/shared/event-emitter"); const DevToolsUtils = require("devtools/shared/DevToolsUtils"); const { DebuggerServer } = require("devtools/server/main"); const { DebuggerClient } = require("devtools/shared/client/main"); +const Services = require("Services"); -Cu.import("resource://gre/modules/Services.jsm"); DevToolsUtils.defineLazyModuleGetter(this, "Task", "resource://gre/modules/Task.jsm"); diff --git a/devtools/shared/content-observer.js b/devtools/shared/content-observer.js index aed807769e6f..3d34826765bb 100644 --- a/devtools/shared/content-observer.js +++ b/devtools/shared/content-observer.js @@ -4,7 +4,7 @@ "use strict"; const {Cc, Ci, Cu, Cr} = require("chrome"); -const {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); +const Services = require("Services"); const events = require("sdk/event/core"); diff --git a/devtools/shared/css-color.js b/devtools/shared/css-color.js index fb5251e3fed0..f69b1a877940 100644 --- a/devtools/shared/css-color.js +++ b/devtools/shared/css-color.js @@ -5,7 +5,7 @@ "use strict"; const {Cc, Ci, Cu} = require("chrome"); -const {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); +const Services = require("Services"); const COLOR_UNIT_PREF = "devtools.defaultColorUnit"; diff --git a/devtools/shared/discovery/discovery.js b/devtools/shared/discovery/discovery.js index 08e771118a9f..64e9a86cf268 100644 --- a/devtools/shared/discovery/discovery.js +++ b/devtools/shared/discovery/discovery.js @@ -34,6 +34,7 @@ const { Cu, CC, Cc, Ci } = require("chrome"); const EventEmitter = require("devtools/shared/event-emitter"); const { setTimeout, clearTimeout } = require("sdk/timers"); +const Services = require("Services"); const UDPSocket = CC("@mozilla.org/network/udp-socket;1", "nsIUDPSocket", @@ -45,7 +46,6 @@ const ADDRESS = "224.0.0.115"; const REPLY_TIMEOUT = 5000; const { XPCOMUtils } = Cu.import("resource://gre/modules/XPCOMUtils.jsm", {}); -const { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); XPCOMUtils.defineLazyGetter(this, "converter", () => { let conv = Cc["@mozilla.org/intl/scriptableunicodeconverter"]. diff --git a/devtools/shared/discovery/tests/unit/test_discovery.js b/devtools/shared/discovery/tests/unit/test_discovery.js index 649636177b80..96cabe4b7fea 100644 --- a/devtools/shared/discovery/tests/unit/test_discovery.js +++ b/devtools/shared/discovery/tests/unit/test_discovery.js @@ -5,20 +5,20 @@ var Cu = Components.utils; -const { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); +const { require } = + Cu.import("resource://devtools/shared/Loader.jsm", {}); +const Services = require("Services"); +const promise = require("promise"); +const EventEmitter = require("devtools/shared/event-emitter"); +const discovery = require("devtools/shared/discovery/discovery"); +const { setTimeout, clearTimeout } = require("sdk/timers"); + Services.prefs.setBoolPref("devtools.discovery.log", true); do_register_cleanup(() => { Services.prefs.clearUserPref("devtools.discovery.log"); }); -const { require } = - Cu.import("resource://devtools/shared/Loader.jsm", {}); -const promise = require("promise"); -const EventEmitter = require("devtools/shared/event-emitter"); -const discovery = require("devtools/shared/discovery/discovery"); -const { setTimeout, clearTimeout } = require("sdk/timers"); - function log(msg) { do_print("DISCOVERY: " + msg); } diff --git a/devtools/shared/gcli/commands/folder.js b/devtools/shared/gcli/commands/folder.js index e120b9bfb319..22a51420d624 100644 --- a/devtools/shared/gcli/commands/folder.js +++ b/devtools/shared/gcli/commands/folder.js @@ -5,7 +5,7 @@ "use strict"; const { Cc, Ci, Cu, CC } = require("chrome"); -const { Services } = require("resource://gre/modules/Services.jsm"); +const Services = require("Services"); const l10n = require("gcli/l10n"); const dirService = Cc["@mozilla.org/file/directory_service;1"] .getService(Ci.nsIProperties); diff --git a/devtools/shared/gcli/commands/inject.js b/devtools/shared/gcli/commands/inject.js index 0dc9e898d9fc..85e995eed43b 100644 --- a/devtools/shared/gcli/commands/inject.js +++ b/devtools/shared/gcli/commands/inject.js @@ -4,7 +4,7 @@ "use strict"; -const { Services } = require("resource://gre/modules/Services.jsm"); +const Services = require("Services"); const { listenOnce } = require("devtools/shared/async-utils"); const l10n = require("gcli/l10n"); diff --git a/devtools/shared/gcli/commands/screenshot.js b/devtools/shared/gcli/commands/screenshot.js index 795703a24fb0..2eca59db8d25 100644 --- a/devtools/shared/gcli/commands/screenshot.js +++ b/devtools/shared/gcli/commands/screenshot.js @@ -6,7 +6,7 @@ const { Cc, Ci, Cu } = require("chrome"); const l10n = require("gcli/l10n"); -const { Services } = require("resource://gre/modules/Services.jsm"); +const Services = require("Services"); const { getRect } = require("devtools/shared/layout/utils"); loader.lazyImporter(this, "Downloads", "resource://gre/modules/Downloads.jsm"); diff --git a/devtools/shared/gcli/source/lib/gcli/l10n.js b/devtools/shared/gcli/source/lib/gcli/l10n.js index d9a3cb1bc41d..1a1af79de759 100644 --- a/devtools/shared/gcli/source/lib/gcli/l10n.js +++ b/devtools/shared/gcli/source/lib/gcli/l10n.js @@ -24,7 +24,7 @@ var prefSvc = Cc['@mozilla.org/preferences-service;1'] .getService(Ci.nsIPrefService); var prefBranch = prefSvc.getBranch(null).QueryInterface(Ci.nsIPrefBranch); -var Services = Cu.import('resource://gre/modules/Services.jsm', {}).Services; +var Services = require("Services"); var stringBundle = Services.strings.createBundle( 'chrome://devtools-shared/locale/gclicommands.properties'); diff --git a/devtools/shared/gcli/source/lib/gcli/settings.js b/devtools/shared/gcli/source/lib/gcli/settings.js index ab5f738e6a96..29e608cbd3ba 100644 --- a/devtools/shared/gcli/source/lib/gcli/settings.js +++ b/devtools/shared/gcli/source/lib/gcli/settings.js @@ -23,7 +23,7 @@ var Ci = require('chrome').Ci; var Cu = require('chrome').Cu; var XPCOMUtils = Cu.import('resource://gre/modules/XPCOMUtils.jsm', {}).XPCOMUtils; -var Services = Cu.import('resource://gre/modules/Services.jsm', {}).Services; +var Services = require("Services"); XPCOMUtils.defineLazyGetter(imports, 'prefBranch', function() { var prefService = Cc['@mozilla.org/preferences-service;1'] diff --git a/devtools/shared/gcli/source/lib/gcli/util/l10n.js b/devtools/shared/gcli/source/lib/gcli/util/l10n.js index 8532b6961ad5..8996d53ad649 100644 --- a/devtools/shared/gcli/source/lib/gcli/util/l10n.js +++ b/devtools/shared/gcli/source/lib/gcli/util/l10n.js @@ -19,7 +19,7 @@ var Cu = require('chrome').Cu; var XPCOMUtils = Cu.import('resource://gre/modules/XPCOMUtils.jsm', {}).XPCOMUtils; -var Services = Cu.import('resource://gre/modules/Services.jsm', {}).Services; +var Services = require("Services"); var imports = {}; XPCOMUtils.defineLazyGetter(imports, 'stringBundle', function () { diff --git a/devtools/shared/indentation.js b/devtools/shared/indentation.js index f05e65c32c94..7168ec1e3210 100644 --- a/devtools/shared/indentation.js +++ b/devtools/shared/indentation.js @@ -7,7 +7,7 @@ "use strict"; const { Cu } = require("chrome"); -Cu.import("resource://gre/modules/Services.jsm"); +const Services = require("Services"); const EXPAND_TAB = "devtools.editor.expandtab"; const TAB_SIZE = "devtools.editor.tabsize"; diff --git a/devtools/shared/tests/mochitest/test_devtools_extensions.html b/devtools/shared/tests/mochitest/test_devtools_extensions.html index 4022f1b48a54..04cc82b220ff 100644 --- a/devtools/shared/tests/mochitest/test_devtools_extensions.html +++ b/devtools/shared/tests/mochitest/test_devtools_extensions.html @@ -17,10 +17,10 @@ - - - - - - - - From fa657376308890e3ef89a03b766b6acd6d787140 Mon Sep 17 00:00:00 2001 From: Alexandre Poirot Date: Sat, 27 Feb 2016 04:51:11 -0800 Subject: [PATCH 38/60] Bug 1250833 - Stop using browser.xul globals specific to devtools. r=jryans --- .../commandline/test/browser_cmd_commands.js | 1 + .../responsive.html/test/browser/head.js | 6 ++--- .../responsivedesign/resize-commands.js | 27 ++++++++----------- .../test/browser_responsive_cmd.js | 2 +- devtools/client/responsivedesign/test/head.js | 6 +++-- .../client/scratchpad/scratchpad-commands.js | 5 ++-- devtools/client/scratchpad/scratchpad.js | 3 ++- .../browser_scratchpad_chrome_context_pref.js | 2 -- .../test/browser_scratchpad_help_key.js | 2 -- .../test/browser_scratchpad_initialization.js | 2 -- .../browser_scratchpad_open_error_console.js | 2 ++ .../test/browser_scratchpad_restore.js | 2 -- .../scratchpad/test/browser_scratchpad_tab.js | 2 -- .../test/browser_scratchpad_unsaved.js | 2 -- devtools/client/scratchpad/test/head.js | 3 ++- .../browser_telemetry_button_responsive.js | 11 ++++---- .../test/browser_console_private_browsing.js | 4 +-- devtools/client/webconsole/test/head.js | 1 + devtools/shared/gcli/commands/jsb.js | 6 ++--- 19 files changed, 40 insertions(+), 49 deletions(-) diff --git a/devtools/client/commandline/test/browser_cmd_commands.js b/devtools/client/commandline/test/browser_cmd_commands.js index 4a6899b99d22..786a7c2268af 100644 --- a/devtools/client/commandline/test/browser_cmd_commands.js +++ b/devtools/client/commandline/test/browser_cmd_commands.js @@ -4,6 +4,7 @@ // Test various GCLI commands const TEST_URI = "data:text/html;charset=utf-8,gcli-commands"; +const HUDService = require("devtools/client/webconsole/hudservice"); function test() { return Task.spawn(spawnTest).then(finish, helpers.handleError); diff --git a/devtools/client/responsive.html/test/browser/head.js b/devtools/client/responsive.html/test/browser/head.js index 9604772be1f1..649d1471f4dd 100644 --- a/devtools/client/responsive.html/test/browser/head.js +++ b/devtools/client/responsive.html/test/browser/head.js @@ -6,7 +6,6 @@ /* eslint no-unused-vars: [2, {"vars": "local"}] */ /* import-globals-from ../../../framework/test/shared-head.js */ /* import-globals-from ../../../framework/test/shared-redux-head.js */ -/* global ResponsiveUI */ Services.scriptloader.loadSubScript( "chrome://mochitests/content/browser/devtools/client/framework/test/shared-head.js", @@ -19,13 +18,14 @@ Services.prefs.setBoolPref("devtools.responsive.html.enabled", true); registerCleanupFunction(() => { Services.prefs.clearUserPref("devtools.responsive.html.enabled"); }); +const { ResponsiveUIManager } = Cu.import("resource://devtools/client/responsivedesign/responsivedesign.jsm", {}); /** * Open responsive design mode for the given tab. */ var openRDM = Task.async(function*(tab) { info("Opening responsive design mode"); - let manager = ResponsiveUI.ResponsiveUIManager; + let manager = ResponsiveUIManager; let ui = yield manager.openIfNeeded(window, tab); info("Responsive design mode opened"); return { ui, manager }; @@ -36,7 +36,7 @@ var openRDM = Task.async(function*(tab) { */ var closeRDM = Task.async(function*(tab) { info("Closing responsive design mode"); - let manager = ResponsiveUI.ResponsiveUIManager; + let manager = ResponsiveUIManager; manager.closeIfNeeded(window, tab); info("Responsive design mode closed"); }); diff --git a/devtools/client/responsivedesign/resize-commands.js b/devtools/client/responsivedesign/resize-commands.js index 4d7f68c13a7a..829564f70c23 100644 --- a/devtools/client/responsivedesign/resize-commands.js +++ b/devtools/client/responsivedesign/resize-commands.js @@ -6,6 +6,8 @@ const { Cc, Ci, Cu } = require("chrome"); +loader.lazyImporter(this, "ResponsiveUIManager", "resource://devtools/client/responsivedesign/responsivedesign.jsm"); + const BRAND_SHORT_NAME = Cc["@mozilla.org/intl/stringbundle;1"]. getService(Ci.nsIStringBundleService). createBundle("chrome://branding/locale/brand.properties"). @@ -48,24 +50,18 @@ exports.items = [ if (!aTarget.tab) { return false; } - let browserWindow = aTarget.tab.ownerDocument.defaultView; - let mgr = browserWindow.ResponsiveUI.ResponsiveUIManager; - return mgr.isActiveForTab(aTarget.tab); + return ResponsiveUIManager.isActiveForTab(aTarget.tab); }, onChange: function(aTarget, aChangeHandler) { if (aTarget.tab) { - let browserWindow = aTarget.tab.ownerDocument.defaultView; - let mgr = browserWindow.ResponsiveUI.ResponsiveUIManager; - mgr.on("on", aChangeHandler); - mgr.on("off", aChangeHandler); + ResponsiveUIManager.on("on", aChangeHandler); + ResponsiveUIManager.on("off", aChangeHandler); } }, offChange: function(aTarget, aChangeHandler) { if (aTarget.tab) { - let browserWindow = aTarget.tab.ownerDocument.defaultView; - let mgr = browserWindow.ResponsiveUI.ResponsiveUIManager; - mgr.off("on", aChangeHandler); - mgr.off("off", aChangeHandler); + ResponsiveUIManager.off("on", aChangeHandler); + ResponsiveUIManager.off("off", aChangeHandler); } }, }, @@ -94,9 +90,8 @@ exports.items = [ function* gcli_cmd_resize(args, context) { let browserWindow = context.environment.chromeWindow; - let mgr = browserWindow.ResponsiveUI.ResponsiveUIManager; - yield mgr.handleGcliCommand(browserWindow, - browserWindow.gBrowser.selectedTab, - this.name, - args); + yield ResponsiveUIManager.handleGcliCommand(browserWindow, + browserWindow.gBrowser.selectedTab, + this.name, + args); } diff --git a/devtools/client/responsivedesign/test/browser_responsive_cmd.js b/devtools/client/responsivedesign/test/browser_responsive_cmd.js index 2345a754cea7..5d13b41d37ca 100644 --- a/devtools/client/responsivedesign/test/browser_responsive_cmd.js +++ b/devtools/client/responsivedesign/test/browser_responsive_cmd.js @@ -11,7 +11,7 @@ thisTestLeaksUncaughtRejectionsAndShouldBeFixed("destroy"); function test() { - let manager = ResponsiveUI.ResponsiveUIManager; + let manager = ResponsiveUIManager; let done; function isOpen() { diff --git a/devtools/client/responsivedesign/test/head.js b/devtools/client/responsivedesign/test/head.js index 2f5f4e147b4a..924291c914cd 100644 --- a/devtools/client/responsivedesign/test/head.js +++ b/devtools/client/responsivedesign/test/head.js @@ -24,6 +24,8 @@ registerCleanupFunction(() => { SimpleTest.requestCompleteLog(); +const { ResponsiveUIManager } = Cu.import("resource://devtools/client/responsivedesign/responsivedesign.jsm", {}); + /** * Open the Responsive Design Mode * @param {Tab} The browser tab to open it into (defaults to the selected tab). @@ -32,7 +34,7 @@ SimpleTest.requestCompleteLog(); */ var openRDM = Task.async(function*(tab = gBrowser.selectedTab, method = "menu") { - let manager = ResponsiveUI.ResponsiveUIManager; + let manager = ResponsiveUIManager; let opened = once(manager, "on"); let resized = once(manager, "contentResize"); @@ -61,7 +63,7 @@ var openRDM = Task.async(function*(tab = gBrowser.selectedTab, * @param {rdm} ResponsiveUI instance for the tab */ var closeRDM = Task.async(function*(rdm) { - let manager = ResponsiveUI.ResponsiveUIManager; + let manager = ResponsiveUIManager; if (!rdm) { rdm = manager.getResponsiveUIForTab(gBrowser.selectedTab); } diff --git a/devtools/client/scratchpad/scratchpad-commands.js b/devtools/client/scratchpad/scratchpad-commands.js index 505b623258e9..e072931f7971 100644 --- a/devtools/client/scratchpad/scratchpad-commands.js +++ b/devtools/client/scratchpad/scratchpad-commands.js @@ -5,6 +5,7 @@ "use strict"; const l10n = require("gcli/l10n"); +const {Cu} = require("chrome"); exports.items = [{ item: "command", @@ -15,7 +16,7 @@ exports.items = [{ tooltipText: l10n.lookup("scratchpadOpenTooltip"), hidden: true, exec: function(args, context) { - let Scratchpad = context.environment.chromeWindow.Scratchpad; - Scratchpad.ScratchpadManager.openScratchpad(); + const {ScratchpadManager} = Cu.import("resource://devtools/client/scratchpad/scratchpad-manager.jsm", {}); + ScratchpadManager.openScratchpad(); } }]; diff --git a/devtools/client/scratchpad/scratchpad.js b/devtools/client/scratchpad/scratchpad.js index abb67fa51560..7e98fe67c85c 100644 --- a/devtools/client/scratchpad/scratchpad.js +++ b/devtools/client/scratchpad/scratchpad.js @@ -81,6 +81,7 @@ loader.lazyRequireGetter(this, "DebuggerServer", "devtools/server/main", true); loader.lazyRequireGetter(this, "DebuggerClient", "devtools/shared/client/main", true); loader.lazyRequireGetter(this, "EnvironmentClient", "devtools/shared/client/main", true); loader.lazyRequireGetter(this, "ObjectClient", "devtools/shared/client/main", true); +loader.lazyRequireGetter(this, "HUDService", "devtools/client/webconsole/hudservice"); XPCOMUtils.defineLazyGetter(this, "REMOTE_TIMEOUT", () => Services.prefs.getIntPref("devtools.debugger.remote-timeout")); @@ -1591,7 +1592,7 @@ var Scratchpad = { */ openErrorConsole: function SP_openErrorConsole() { - this.browserWindow.HUDService.toggleBrowserConsole(); + HUDService.toggleBrowserConsole(); }, /** diff --git a/devtools/client/scratchpad/test/browser_scratchpad_chrome_context_pref.js b/devtools/client/scratchpad/test/browser_scratchpad_chrome_context_pref.js index 0b061e391a7e..08528d2c2731 100644 --- a/devtools/client/scratchpad/test/browser_scratchpad_chrome_context_pref.js +++ b/devtools/client/scratchpad/test/browser_scratchpad_chrome_context_pref.js @@ -15,8 +15,6 @@ function test() gBrowser.selectedBrowser.addEventListener("load", function onLoad() { gBrowser.selectedBrowser.removeEventListener("load", onLoad, true); - ok(window.Scratchpad, "Scratchpad variable exists"); - openScratchpad(runTests); }, true); diff --git a/devtools/client/scratchpad/test/browser_scratchpad_help_key.js b/devtools/client/scratchpad/test/browser_scratchpad_help_key.js index 1a995fe5338a..e8233be303ec 100644 --- a/devtools/client/scratchpad/test/browser_scratchpad_help_key.js +++ b/devtools/client/scratchpad/test/browser_scratchpad_help_key.js @@ -12,8 +12,6 @@ function test() gBrowser.selectedBrowser.addEventListener("load", function onTabLoad() { gBrowser.selectedBrowser.removeEventListener("load", onTabLoad, true); - ok(window.Scratchpad, "Scratchpad variable exists"); - openScratchpad(runTest); }, true); } diff --git a/devtools/client/scratchpad/test/browser_scratchpad_initialization.js b/devtools/client/scratchpad/test/browser_scratchpad_initialization.js index c102e06f6cb7..387bcb08cd73 100644 --- a/devtools/client/scratchpad/test/browser_scratchpad_initialization.js +++ b/devtools/client/scratchpad/test/browser_scratchpad_initialization.js @@ -13,8 +13,6 @@ function test() gBrowser.selectedBrowser.addEventListener("load", function onLoad() { gBrowser.selectedBrowser.removeEventListener("load", onLoad, true); - ok(window.Scratchpad, "Scratchpad variable exists"); - openScratchpad(runTests); }, true); diff --git a/devtools/client/scratchpad/test/browser_scratchpad_open_error_console.js b/devtools/client/scratchpad/test/browser_scratchpad_open_error_console.js index 2ac937ccbcb5..4da2a2dafa9e 100644 --- a/devtools/client/scratchpad/test/browser_scratchpad_open_error_console.js +++ b/devtools/client/scratchpad/test/browser_scratchpad_open_error_console.js @@ -2,6 +2,8 @@ /* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ +const HUDService = require("devtools/client/webconsole/hudservice"); + function test() { waitForExplicitFinish(); diff --git a/devtools/client/scratchpad/test/browser_scratchpad_restore.js b/devtools/client/scratchpad/test/browser_scratchpad_restore.js index a83c4213ce7e..1a06b232c1f9 100644 --- a/devtools/client/scratchpad/test/browser_scratchpad_restore.js +++ b/devtools/client/scratchpad/test/browser_scratchpad_restore.js @@ -2,8 +2,6 @@ /* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ -var ScratchpadManager = Scratchpad.ScratchpadManager; - /* Call the iterator for each item in the list, calling the final callback with all the results after every iterator call has sent its result */ diff --git a/devtools/client/scratchpad/test/browser_scratchpad_tab.js b/devtools/client/scratchpad/test/browser_scratchpad_tab.js index 494105624dd6..67057f206589 100644 --- a/devtools/client/scratchpad/test/browser_scratchpad_tab.js +++ b/devtools/client/scratchpad/test/browser_scratchpad_tab.js @@ -11,8 +11,6 @@ function test() gBrowser.selectedBrowser.addEventListener("load", function onTabLoad() { gBrowser.selectedBrowser.removeEventListener("load", onTabLoad, true); - ok(window.Scratchpad, "Scratchpad variable exists"); - Services.prefs.setIntPref("devtools.editor.tabsize", 5); openScratchpad(runTests); diff --git a/devtools/client/scratchpad/test/browser_scratchpad_unsaved.js b/devtools/client/scratchpad/test/browser_scratchpad_unsaved.js index 1cc14ddf62b3..d9730a7978ba 100644 --- a/devtools/client/scratchpad/test/browser_scratchpad_unsaved.js +++ b/devtools/client/scratchpad/test/browser_scratchpad_unsaved.js @@ -13,8 +13,6 @@ function done() } } -var ScratchpadManager = Scratchpad.ScratchpadManager; - function test() { diff --git a/devtools/client/scratchpad/test/head.js b/devtools/client/scratchpad/test/head.js index f6e1fca46405..31aaa3411ce4 100644 --- a/devtools/client/scratchpad/test/head.js +++ b/devtools/client/scratchpad/test/head.js @@ -7,6 +7,7 @@ const {NetUtil} = Cu.import("resource://gre/modules/NetUtil.jsm", {}); const {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm", {}); const {console} = Cu.import("resource://gre/modules/Console.jsm", {}); +const {ScratchpadManager} = Cu.import("resource://devtools/client/scratchpad/scratchpad-manager.jsm", {}); const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); const Services = require("Services"); const DevToolsUtils = require("devtools/shared/DevToolsUtils"); @@ -44,7 +45,7 @@ SimpleTest.registerCleanupFunction(() => { function openScratchpad(aReadyCallback, aOptions = {}) { let win = aOptions.window || - Scratchpad.ScratchpadManager.openScratchpad(aOptions.state); + ScratchpadManager.openScratchpad(aOptions.state); if (!win) { return; } diff --git a/devtools/client/shared/test/browser_telemetry_button_responsive.js b/devtools/client/shared/test/browser_telemetry_button_responsive.js index 3227e7ed6892..aaa80cf698fa 100644 --- a/devtools/client/shared/test/browser_telemetry_button_responsive.js +++ b/devtools/client/shared/test/browser_telemetry_button_responsive.js @@ -8,6 +8,8 @@ const TEST_URI = "data:text/html;charset=utf-8," + // opened we make use of setTimeout() to create tool active times. const TOOL_DELAY = 200; +const { ResponsiveUIManager } = Cu.import("resource://devtools/client/responsivedesign/responsivedesign.jsm", {}); + add_task(function*() { yield addTab(TEST_URI); let Telemetry = loadTelemetryAndRecordLogs(); @@ -38,13 +40,12 @@ function* testButton(toolbox, Telemetry) { function waitForToggle() { return new Promise(resolve => { let handler = () => { - manager.off("on", handler); - manager.off("off", handler); + ResponsiveUIManager.off("on", handler); + ResponsiveUIManager.off("off", handler); resolve(); }; - let manager = ResponsiveUI.ResponsiveUIManager; - manager.on("on", handler); - manager.on("off", handler); + ResponsiveUIManager.on("on", handler); + ResponsiveUIManager.on("off", handler); }); } diff --git a/devtools/client/webconsole/test/browser_console_private_browsing.js b/devtools/client/webconsole/test/browser_console_private_browsing.js index 5f921d2510e3..c003b98a6bd5 100644 --- a/devtools/client/webconsole/test/browser_console_private_browsing.js +++ b/devtools/client/webconsole/test/browser_console_private_browsing.js @@ -127,7 +127,7 @@ function test() { info("testBrowserConsole()"); closeConsole(privateTab).then(() => { info("web console closed"); - privateWindow.HUDService.toggleBrowserConsole().then(onBrowserConsoleOpen); + HUDService.toggleBrowserConsole().then(onBrowserConsoleOpen); }); } @@ -163,7 +163,7 @@ function test() { checkNoPrivateMessages(); info("close the browser console"); - privateWindow.HUDService.toggleBrowserConsole().then(() => { + HUDService.toggleBrowserConsole().then(() => { info("reopen the browser console"); executeSoon(() => HUDService.toggleBrowserConsole().then(onBrowserConsoleReopen)); diff --git a/devtools/client/webconsole/test/head.js b/devtools/client/webconsole/test/head.js index f67ae804b44f..cccce69ca3b4 100644 --- a/devtools/client/webconsole/test/head.js +++ b/devtools/client/webconsole/test/head.js @@ -12,6 +12,7 @@ var {Task} = Cu.import("resource://gre/modules/Task.jsm", {}); var {Utils: WebConsoleUtils} = require("devtools/shared/webconsole/utils"); var {Messages} = require("devtools/client/webconsole/console-output"); const asyncStorage = require("devtools/shared/async-storage"); +const HUDService = require("devtools/client/webconsole/hudservice"); // Services.prefs.setBoolPref("devtools.debugger.log", true); diff --git a/devtools/shared/gcli/commands/jsb.js b/devtools/shared/gcli/commands/jsb.js index 11ffcf2dfd9e..4f9533a8be38 100644 --- a/devtools/shared/gcli/commands/jsb.js +++ b/devtools/shared/gcli/commands/jsb.js @@ -9,6 +9,7 @@ const l10n = require("gcli/l10n"); const XMLHttpRequest = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"]; loader.lazyImporter(this, "Preferences", "resource://gre/modules/Preferences.jsm"); +loader.lazyImporter(this, "ScratchpadManager", "resource://devtools/client/scratchpad/scratchpad-manager.jsm"); loader.lazyRequireGetter(this, "beautify", "devtools/shared/jsbeautify/beautify"); @@ -116,12 +117,9 @@ exports.items = [ xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if (xhr.status == 200 || xhr.status == 0) { - let browserDoc = context.environment.chromeDocument; - let browserWindow = browserDoc.defaultView; - let gBrowser = browserWindow.gBrowser; let result = beautify.js(xhr.responseText, opts); - browserWindow.Scratchpad.ScratchpadManager.openScratchpad({text: result}); + ScratchpadManager.openScratchpad({text: result}); deferred.resolve(); } else { From 20e2ec71ce67a86db65e581d637e33148a5938ed Mon Sep 17 00:00:00 2001 From: Alexandre Poirot Date: Sat, 27 Feb 2016 04:51:11 -0800 Subject: [PATCH 39/60] Bug 1248601 - Register the Developer Toolbar dynamically. r=jwalker --- browser/base/content/browser.js | 2 +- browser/base/content/browser.xul | 23 ------ devtools/client/shared/developer-toolbar.js | 82 ++++++++++++++++--- ...browser_toolbar_webconsole_errors_count.js | 5 +- 4 files changed, 75 insertions(+), 37 deletions(-) diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 7097e95bbc1c..227f0932ca8f 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -160,7 +160,7 @@ XPCOMUtils.defineLazyGetter(this, "PopupNotifications", function () { XPCOMUtils.defineLazyGetter(this, "DeveloperToolbar", function() { let { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); let { DeveloperToolbar } = require("devtools/client/shared/developer-toolbar"); - return new DeveloperToolbar(window, document.getElementById("developer-toolbar")); + return new DeveloperToolbar(window); }); XPCOMUtils.defineLazyGetter(this, "BrowserToolboxProcess", function() { diff --git a/browser/base/content/browser.xul b/browser/base/content/browser.xul index beac6087d791..3dd261567103 100644 --- a/browser/base/content/browser.xul +++ b/browser/base/content/browser.xul @@ -1109,29 +1109,6 @@ - diff --git a/devtools/client/shared/developer-toolbar.js b/devtools/client/shared/developer-toolbar.js index ce5bf37ef26d..2d0ab2438b7d 100644 --- a/devtools/client/shared/developer-toolbar.js +++ b/devtools/client/shared/developer-toolbar.js @@ -213,6 +213,9 @@ exports.CommandUtils = CommandUtils; loader.lazyGetter(this, "isLinux", function() { return OS == "Linux"; }); +loader.lazyGetter(this, "isMac", function() { + return OS == "Darwin"; +}); loader.lazyGetter(this, "OS", function() { let os = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).OS; @@ -223,26 +226,19 @@ loader.lazyGetter(this, "OS", function() { * A component to manage the global developer toolbar, which contains a GCLI * and buttons for various developer tools. * @param aChromeWindow The browser window to which this toolbar is attached - * @param aToolbarElement See browser.xul: */ -function DeveloperToolbar(aChromeWindow, aToolbarElement) +function DeveloperToolbar(aChromeWindow) { this._chromeWindow = aChromeWindow; this.target = null; // Will be setup when show() is called - this._element = aToolbarElement; - this._element.hidden = true; - this._doc = this._element.ownerDocument; + this._doc = aChromeWindow.document; this._telemetry = new Telemetry(); this._errorsCount = {}; this._warningsCount = {}; this._errorListeners = {}; - this._errorCounterButton = this._doc - .getElementById("developer-toolbar-toolbox-button"); - this._errorCounterButton._defaultTooltipText = - this._errorCounterButton.getAttribute("tooltiptext"); EventEmitter.decorate(this); } @@ -273,7 +269,7 @@ DeveloperToolbar.prototype.NOTIFICATIONS = NOTIFICATIONS; */ Object.defineProperty(DeveloperToolbar.prototype, "visible", { get: function() { - return !this._element.hidden; + return this._element && !this._element.hidden; }, enumerable: true }); @@ -290,6 +286,62 @@ Object.defineProperty(DeveloperToolbar.prototype, "sequenceId", { enumerable: true }); +/** + * Create the element to insert within browser UI + */ +DeveloperToolbar.prototype.createToolbar = function() { + if (this._element) { + return; + } + let toolbar = this._doc.createElement("toolbar"); + toolbar.setAttribute("id", "developer-toolbar"); + toolbar.setAttribute("hidden", "true"); + + let close = this._doc.createElement("toolbarbutton"); + close.setAttribute("id", "developer-toolbar-closebutton"); + close.setAttribute("class", "devtools-closebutton"); + close.setAttribute("oncommand", "DeveloperToolbar.hide();"); + close.setAttribute("tooltiptext", "developerToolbarCloseButton.tooltiptext"); + + let stack = this._doc.createElement("stack"); + stack.setAttribute("flex", "1"); + + let input = this._doc.createElement("textbox"); + input.setAttribute("class", "gclitoolbar-input-node"); + input.setAttribute("rows", "1"); + stack.appendChild(input); + + let hbox = this._doc.createElement("hbox"); + hbox.setAttribute("class", "gclitoolbar-complete-node"); + stack.appendChild(hbox); + + let toolboxBtn = this._doc.createElement("toolbarbutton"); + toolboxBtn.setAttribute("id", "developer-toolbar-toolbox-button"); + toolboxBtn.setAttribute("class", "developer-toolbar-button"); + toolboxBtn.setAttribute("observes", "devtoolsMenuBroadcaster_DevToolbox"); + toolboxBtn.setAttribute("tooltiptext", "devToolbarToolsButton.tooltip"); + + // On Mac, the close button is on the left, + // while it is on the right on every other platforms. + if (isMac) { + toolbar.appendChild(close); + toolbar.appendChild(stack); + toolbar.appendChild(toolboxBtn); + } else { + toolbar.appendChild(stack); + toolbar.appendChild(toolboxBtn); + toolbar.appendChild(close); + } + + let bottomBox = this._doc.getElementById("browser-bottombox"); + this._element = toolbar; + bottomBox.appendChild(this._element); + + this._errorCounterButton = toolboxBtn + this._errorCounterButton._defaultTooltipText = + this._errorCounterButton.getAttribute("tooltiptext"); +}; + /** * Called from browser.xul in response to menu-click or keyboard shortcut to * toggle the toolbar @@ -356,6 +408,8 @@ DeveloperToolbar.prototype.show = function(focus) { var waitPromise = this._hidePromise || promise.resolve(); this._showPromise = waitPromise.then(() => { + this.createToolbar(); + Services.prefs.setBoolPref("devtools.toolbar.visible", true); this._telemetry.toolOpened("developertoolbar"); @@ -383,7 +437,10 @@ DeveloperToolbar.prototype.show = function(focus) { return CommandUtils.createRequisition(this.target, options).then(requisition => { this.requisition = requisition; - return this.requisition.update(this._input.value).then(() => { + // The `value` may still be undefined on the XUL binding if + // we fetch it early + let value = this._input.value || ""; + return this.requisition.update(value).then(() => { const Inputter = require('gcli/mozui/inputter').Inputter; const Completer = require('gcli/mozui/completer').Completer; const Tooltip = require('gcli/mozui/tooltip').Tooltip; @@ -599,6 +656,9 @@ DeveloperToolbar.prototype.destroy = function() { CommandUtils.destroyRequisition(this.requisition, this.target); this.target = undefined; + + this._element.remove(); + delete this._element; }; /** diff --git a/devtools/client/shared/test/browser_toolbar_webconsole_errors_count.js b/devtools/client/shared/test/browser_toolbar_webconsole_errors_count.js index 235af7bd0a2f..af5df009834a 100644 --- a/devtools/client/shared/test/browser_toolbar_webconsole_errors_count.js +++ b/devtools/client/shared/test/browser_toolbar_webconsole_errors_count.js @@ -6,8 +6,8 @@ function test() { const TEST_URI = TEST_URI_ROOT + "browser_toolbar_webconsole_errors_count.html"; - let webconsole = document.getElementById("developer-toolbar-toolbox-button"); - let tab1, tab2; + + let tab1, tab2, webconsole; Services.prefs.setBoolPref("javascript.options.strict", true); @@ -34,6 +34,7 @@ function test() { function onOpenToolbar() { ok(DeveloperToolbar.visible, "DeveloperToolbar is visible"); + webconsole = document.getElementById("developer-toolbar-toolbox-button"); waitForButtonUpdate({ name: "web console button shows page errors", From 4ba825caa759c565afc86800004bc5a23dcba9a2 Mon Sep 17 00:00:00 2001 From: Alexandre Poirot Date: Sat, 27 Feb 2016 04:51:11 -0800 Subject: [PATCH 40/60] Bug 1248601 - Fix focus race due to dynamic XUL insertion. r=jwalker --- devtools/client/shared/developer-toolbar.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/devtools/client/shared/developer-toolbar.js b/devtools/client/shared/developer-toolbar.js index 2d0ab2438b7d..01ec8e3bb233 100644 --- a/devtools/client/shared/developer-toolbar.js +++ b/devtools/client/shared/developer-toolbar.js @@ -496,11 +496,22 @@ DeveloperToolbar.prototype.show = function(focus) { this._element.hidden = false; if (focus) { - this._input.focus(); + // If the toolbar was just inserted, the may still have + // its binding in process of being applied and not be focusable yet + let waitForBinding = () => { + // mInputField is a xbl field of + if (typeof this._input.mInputField != "undefined") { + this._input.focus(); + this._notify(NOTIFICATIONS.SHOW); + } else { + this._input.ownerDocument.defaultView.setTimeout(waitForBinding, 50); + } + }; + waitForBinding(); + } else { + this._notify(NOTIFICATIONS.SHOW); } - this._notify(NOTIFICATIONS.SHOW); - if (!DeveloperToolbar.introShownThisSession) { let intro = require("gcli/ui/intro"); intro.maybeShowIntro(this.requisition.commandOutputManager, From e995cee22e25637ebfc5d61802dee46547ade5e2 Mon Sep 17 00:00:00 2001 From: Tim Nguyen Date: Sat, 27 Feb 2016 15:30:54 +0100 Subject: [PATCH 41/60] Bug 1201829 - Fix devtools tooltip arrows on HDPI screens. r=pbrosset MozReview-Commit-ID: L5G9NKANubW --- devtools/client/themes/dark-theme.css | 20 ++++++++++++++++---- devtools/client/themes/light-theme.css | 20 ++++++++++++++++---- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/devtools/client/themes/dark-theme.css b/devtools/client/themes/dark-theme.css index 5d0c74bad84d..9acf7902e34b 100644 --- a/devtools/client/themes/dark-theme.css +++ b/devtools/client/themes/dark-theme.css @@ -319,23 +319,35 @@ div.CodeMirror span.eval-text { --arrow-margin: -7px; } -.theme-tooltip-panel .panel-arrow[side="top"] { +.theme-tooltip-panel .panel-arrow[side="top"], +.theme-tooltip-panel .panel-arrow[side="bottom"] { list-style-image: url("chrome://devtools/skin/tooltip/arrow-vertical-dark.png"); + /* !important is needed to override the popup.css rules in toolkit/themes */ + width: 39px !important; + height: 16px !important; +} + +.theme-tooltip-panel .panel-arrow[side="left"], +.theme-tooltip-panel .panel-arrow[side="right"] { + list-style-image: url("chrome://devtools/skin/tooltip/arrow-horizontal-dark.png"); + /* !important is needed to override the popup.css rules in toolkit/themes */ + width: 16px !important; + height: 39px !important; +} + +.theme-tooltip-panel .panel-arrow[side="top"] { margin-bottom: var(--arrow-margin); } .theme-tooltip-panel .panel-arrow[side="bottom"] { - list-style-image: url("chrome://devtools/skin/tooltip/arrow-vertical-dark.png"); margin-top: var(--arrow-margin); } .theme-tooltip-panel .panel-arrow[side="left"] { - list-style-image: url("chrome://devtools/skin/tooltip/arrow-horizontal-dark.png"); margin-right: var(--arrow-margin); } .theme-tooltip-panel .panel-arrow[side="right"] { - list-style-image: url("chrome://devtools/skin/tooltip/arrow-horizontal-dark.png"); margin-left: var(--arrow-margin); } diff --git a/devtools/client/themes/light-theme.css b/devtools/client/themes/light-theme.css index f98d58cf152b..ab37a18a0446 100644 --- a/devtools/client/themes/light-theme.css +++ b/devtools/client/themes/light-theme.css @@ -328,23 +328,35 @@ div.CodeMirror span.eval-text { --arrow-margin: -7px; } -.theme-tooltip-panel .panel-arrow[side="top"] { +.theme-tooltip-panel .panel-arrow[side="top"], +.theme-tooltip-panel .panel-arrow[side="bottom"] { list-style-image: url("chrome://devtools/skin/tooltip/arrow-vertical-light.png"); + /* !important is needed to override the popup.css rules in toolkit/themes */ + width: 39px !important; + height: 16px !important; +} + +.theme-tooltip-panel .panel-arrow[side="left"], +.theme-tooltip-panel .panel-arrow[side="right"] { + list-style-image: url("chrome://devtools/skin/tooltip/arrow-horizontal-light.png"); + /* !important is needed to override the popup.css rules in toolkit/themes */ + width: 16px !important; + height: 39px !important; +} + +.theme-tooltip-panel .panel-arrow[side="top"] { margin-bottom: var(--arrow-margin); } .theme-tooltip-panel .panel-arrow[side="bottom"] { - list-style-image: url("chrome://devtools/skin/tooltip/arrow-vertical-light.png"); margin-top: var(--arrow-margin); } .theme-tooltip-panel .panel-arrow[side="left"] { - list-style-image: url("chrome://devtools/skin/tooltip/arrow-horizontal-light.png"); margin-right: var(--arrow-margin); } .theme-tooltip-panel .panel-arrow[side="right"] { - list-style-image: url("chrome://devtools/skin/tooltip/arrow-horizontal-light.png"); margin-left: var(--arrow-margin); } From 4728cb0889b0bf360c79a6f5b9a5dd70cc0386df Mon Sep 17 00:00:00 2001 From: Tim Nguyen Date: Sat, 27 Feb 2016 15:31:54 +0100 Subject: [PATCH 42/60] Bug 1251727 - Fix missing toolbox left border when docked to the side. r=pbro MozReview-Commit-ID: 8Fr2yw4ZY2L --- devtools/client/themes/splitters.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/devtools/client/themes/splitters.css b/devtools/client/themes/splitters.css index c92564111618..db12c77993d1 100644 --- a/devtools/client/themes/splitters.css +++ b/devtools/client/themes/splitters.css @@ -3,12 +3,12 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* Splitters */ -:root[devtoolstheme="light"] .devtools-horizontal-splitter { +:root[devtoolstheme="light"] { /* These variables are used in browser.xul but inside the toolbox they are overridden by --theme-splitter-color */ --devtools-splitter-color: #dde1e4; } -:root[devtoolstheme="dark"] .devtools-horizontal-splitter { +:root[devtoolstheme="dark"] { --devtools-splitter-color: #42484f; } From 42d7d55a856ff55b28244684f17ee39a0c0d3b11 Mon Sep 17 00:00:00 2001 From: Marco Bonardo Date: Fri, 26 Feb 2016 14:50:41 +0100 Subject: [PATCH 43/60] Bug 1251469 - Add telemetry probes for the time needed to sanitize a loaded or unloaded Flash. r=yoric MozReview-Commit-ID: 8j9teGzMSV2 --HG-- extra : rebase_source : 57fac49ccce20d013fbfe20e28c98dfe3048a56c extra : amend_source : e25c7975283782e6b705958ea6d060edfcf84d67 --- browser/base/content/sanitize.js | 18 +++++++-- toolkit/components/telemetry/Histograms.json | 40 ++++++++++++++------ 2 files changed, 44 insertions(+), 14 deletions(-) diff --git a/browser/base/content/sanitize.js b/browser/base/content/sanitize.js index 746f4aba95e2..e50e7108d29a 100644 --- a/browser/base/content/sanitize.js +++ b/browser/base/content/sanitize.js @@ -288,9 +288,8 @@ Sanitizer.prototype = { }), promiseClearPluginCookies: Task.async(function* (range) { - const phInterface = Ci.nsIPluginHost; - const FLAG_CLEAR_ALL = phInterface.FLAG_CLEAR_ALL; - let ph = Cc["@mozilla.org/plugin/host;1"].getService(phInterface); + const FLAG_CLEAR_ALL = Ci.nsIPluginHost.FLAG_CLEAR_ALL; + let ph = Cc["@mozilla.org/plugin/host;1"].getService(Ci.nsIPluginHost); // Determine age range in seconds. (-1 means clear all.) We don't know // that range[1] is actually now, so we compute age range based @@ -299,6 +298,13 @@ Sanitizer.prototype = { if (!range || age >= 0) { let tags = ph.getPluginTags(); for (let tag of tags) { + let refObj = {}; + let probe = ""; + if (/\bFlash\b/.test(tag.name)) { + probe = tag.loaded ? "FX_SANITIZE_LOADED_FLASH" + : "FX_SANITIZE_UNLOADED_FLASH"; + TelemetryStopwatch.start(probe, refObj); + } try { let rv = yield new Promise(resolve => ph.clearSiteData(tag, null, FLAG_CLEAR_ALL, age, resolve) @@ -309,8 +315,14 @@ Sanitizer.prototype = { ph.clearSiteData(tag, null, FLAG_CLEAR_ALL, -1, resolve) ); } + if (probe) { + TelemetryStopwatch.finish(probe, refObj); + } } catch (ex) { // Ignore errors from plug-ins + if (probe) { + TelemetryStopwatch.cancel(probe, refObj); + } } } } diff --git a/toolkit/components/telemetry/Histograms.json b/toolkit/components/telemetry/Histograms.json index 31756f0cbfba..6e8bdaf113c5 100644 --- a/toolkit/components/telemetry/Histograms.json +++ b/toolkit/components/telemetry/Histograms.json @@ -8771,15 +8771,15 @@ "description": "Count of use of audio/video codecs in HTMLMediaElements and WebAudio. Those with 'resource' prefix are approximate; report based on HTTP ContentType or sniffing. Those with 'webaudio' prefix are for WebAudio." }, "FX_SANITIZE_TOTAL": { - "alert_emails": ["firefox-dev@mozilla.org", "gavin@mozilla.com"], - "expires_in_version": "50", + "alert_emails": ["firefox-dev@mozilla.org"], + "expires_in_version": "never", "kind": "exponential", "high": 30000, "n_buckets": 20, "description": "Sanitize: Total time it takes to sanitize (ms)" }, "FX_SANITIZE_CACHE": { - "alert_emails": ["firefox-dev@mozilla.org", "gavin@mozilla.com"], + "alert_emails": ["firefox-dev@mozilla.org"], "expires_in_version": "50", "kind": "exponential", "high": 30000, @@ -8787,7 +8787,7 @@ "description": "Sanitize: Time it takes to sanitize the cache (ms)" }, "FX_SANITIZE_COOKIES": { - "alert_emails": ["firefox-dev@mozilla.org", "gavin@mozilla.com"], + "alert_emails": ["firefox-dev@mozilla.org"], "expires_in_version": "50", "kind": "exponential", "high": 30000, @@ -8810,8 +8810,26 @@ "n_buckets": 20, "description": "Sanitize: Time it takes to sanitize plugin cookies (ms). A subset of FX_SANITIZE_COOKIES." }, + "FX_SANITIZE_LOADED_FLASH": { + "alert_emails": ["firefox-dev@mozilla.org"], + "bug_numbers": [1251469], + "expires_in_version": "50", + "kind": "exponential", + "high": 30000, + "n_buckets": 20, + "description": "Sanitize: Time it takes to sanitize Flash when it's already loaded (ms). A subset of FX_SANITIZE_PLUGINS." + }, + "FX_SANITIZE_UNLOADED_FLASH": { + "alert_emails": ["firefox-dev@mozilla.org"], + "bug_numbers": [1251469], + "expires_in_version": "50", + "kind": "exponential", + "high": 30000, + "n_buckets": 20, + "description": "Sanitize: Time it takes to sanitize Flash when it's not yet loaded (ms). A subset of FX_SANITIZE_PLUGINS." + }, "FX_SANITIZE_OFFLINEAPPS": { - "alert_emails": ["firefox-dev@mozilla.org", "gavin@mozilla.com"], + "alert_emails": ["firefox-dev@mozilla.org"], "expires_in_version": "50", "kind": "exponential", "high": 30000, @@ -8819,7 +8837,7 @@ "description": "Sanitize: Time it takes to sanitize stored offline app data (ms)" }, "FX_SANITIZE_HISTORY": { - "alert_emails": ["firefox-dev@mozilla.org", "gavin@mozilla.com"], + "alert_emails": ["firefox-dev@mozilla.org"], "expires_in_version": "50", "kind": "exponential", "high": 30000, @@ -8827,7 +8845,7 @@ "description": "Sanitize: Time it takes to sanitize history (ms)" }, "FX_SANITIZE_FORMDATA": { - "alert_emails": ["firefox-dev@mozilla.org", "gavin@mozilla.com"], + "alert_emails": ["firefox-dev@mozilla.org"], "expires_in_version": "50", "kind": "exponential", "high": 30000, @@ -8835,7 +8853,7 @@ "description": "Sanitize: Time it takes to sanitize stored form data (ms)" }, "FX_SANITIZE_DOWNLOADS": { - "alert_emails": ["firefox-dev@mozilla.org", "gavin@mozilla.com"], + "alert_emails": ["firefox-dev@mozilla.org"], "expires_in_version": "50", "kind": "exponential", "high": 30000, @@ -8843,7 +8861,7 @@ "description": "Sanitize: Time it takes to sanitize recent downloads (ms)" }, "FX_SANITIZE_SESSIONS": { - "alert_emails": ["firefox-dev@mozilla.org", "gavin@mozilla.com"], + "alert_emails": ["firefox-dev@mozilla.org"], "expires_in_version": "50", "kind": "exponential", "high": 30000, @@ -8851,7 +8869,7 @@ "description": "Sanitize: Time it takes to sanitize saved sessions (ms)" }, "FX_SANITIZE_SITESETTINGS": { - "alert_emails": ["firefox-dev@mozilla.org", "gavin@mozilla.com"], + "alert_emails": ["firefox-dev@mozilla.org"], "expires_in_version": "50", "kind": "exponential", "high": 30000, @@ -8859,7 +8877,7 @@ "description": "Sanitize: Time it takes to sanitize site-specific settings (ms)" }, "FX_SANITIZE_OPENWINDOWS": { - "alert_emails": ["firefox-dev@mozilla.org", "gavin@mozilla.com"], + "alert_emails": ["firefox-dev@mozilla.org"], "expires_in_version": "50", "kind": "exponential", "high": 30000, From 4d0651c98775955488bb730ea986de755ca16525 Mon Sep 17 00:00:00 2001 From: Patrick Brosset Date: Sat, 27 Feb 2016 20:39:21 +0100 Subject: [PATCH 44/60] Bug 1249888 - try/catch SourceMapConsumer to avoid empty rule-view when source map is invalid; r=gl --HG-- extra : rebase_source : 744840ba5bb668baf761de0ee1af33395a64aeb4 extra : histedit_source : 157aa5a266678390d2244c790fc44869c3a9f7b7%2C5ea5da38fe59c2612c8fcec8790350732837c9fb --- .../client/inspector/rules/test/browser.ini | 3 ++ .../test/browser_rules_invalid-source-map.js | 43 +++++++++++++++++++ .../rules/test/doc_invalid_sourcemap.css | 3 ++ .../rules/test/doc_invalid_sourcemap.html | 11 +++++ devtools/server/actors/stylesheets.js | 31 ++++++++----- 5 files changed, 80 insertions(+), 11 deletions(-) create mode 100644 devtools/client/inspector/rules/test/browser_rules_invalid-source-map.js create mode 100644 devtools/client/inspector/rules/test/doc_invalid_sourcemap.css create mode 100644 devtools/client/inspector/rules/test/doc_invalid_sourcemap.html diff --git a/devtools/client/inspector/rules/test/browser.ini b/devtools/client/inspector/rules/test/browser.ini index 7e3f0579ba33..5f1424eb852a 100644 --- a/devtools/client/inspector/rules/test/browser.ini +++ b/devtools/client/inspector/rules/test/browser.ini @@ -14,6 +14,8 @@ support-files = doc_custom.html doc_filter.html doc_frame_script.js + doc_invalid_sourcemap.css + doc_invalid_sourcemap.html doc_keyframeanimation.css doc_keyframeanimation.html doc_keyframeLineNumbers.html @@ -119,6 +121,7 @@ skip-if = (os == "win" && debug) # bug 963492: win. [browser_rules_inherited-properties_01.js] [browser_rules_inherited-properties_02.js] [browser_rules_inherited-properties_03.js] +[browser_rules_invalid-source-map.js] [browser_rules_keybindings.js] [browser_rules_keyframes-rule_01.js] [browser_rules_keyframes-rule_02.js] diff --git a/devtools/client/inspector/rules/test/browser_rules_invalid-source-map.js b/devtools/client/inspector/rules/test/browser_rules_invalid-source-map.js new file mode 100644 index 000000000000..1a796556ccde --- /dev/null +++ b/devtools/client/inspector/rules/test/browser_rules_invalid-source-map.js @@ -0,0 +1,43 @@ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// Test that when a source map is missing/invalid, the rule view still loads +// correctly. + +const TESTCASE_URI = URL_ROOT + "doc_invalid_sourcemap.html"; +const PREF = "devtools.styleeditor.source-maps-enabled"; +const CSS_LOC = "doc_invalid_sourcemap.css:1"; + +add_task(function*() { + Services.prefs.setBoolPref(PREF, true); + + yield addTab(TESTCASE_URI); + let {inspector, view} = yield openRuleView(); + + yield selectNode("div", inspector); + + let ruleEl = getRuleViewRule(view, "div"); + ok(ruleEl, "The 'div' rule exists in the rule-view"); + + let prop = getRuleViewProperty(view, "div", "color"); + ok(prop, "The 'color' property exists in this rule"); + + let value = getRuleViewPropertyValue(view, "div", "color"); + is(value, "gold", "The 'color' property has the right value"); + + yield verifyLinkText(view, CSS_LOC); + + Services.prefs.clearUserPref(PREF); +}); + +function verifyLinkText(view, text) { + info("Verifying that the rule-view stylesheet link is " + text); + let label = getRuleViewLinkByIndex(view, 1).querySelector("label"); + return waitForSuccess( + () => label.getAttribute("value") == text, + "Link text changed to display correct location: " + text + ); +} diff --git a/devtools/client/inspector/rules/test/doc_invalid_sourcemap.css b/devtools/client/inspector/rules/test/doc_invalid_sourcemap.css new file mode 100644 index 000000000000..ff96a6b542dc --- /dev/null +++ b/devtools/client/inspector/rules/test/doc_invalid_sourcemap.css @@ -0,0 +1,3 @@ +div { color: gold; } + +/*# sourceMappingURL=this-source-map-does-not-exist.css.map */ \ No newline at end of file diff --git a/devtools/client/inspector/rules/test/doc_invalid_sourcemap.html b/devtools/client/inspector/rules/test/doc_invalid_sourcemap.html new file mode 100644 index 000000000000..2e6422becd82 --- /dev/null +++ b/devtools/client/inspector/rules/test/doc_invalid_sourcemap.html @@ -0,0 +1,11 @@ + + + + + Invalid source map + + + +