Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(374)

Unified Diff: telemetry/telemetry/internal/browser/wait_for_serviceworker_registration.js

Issue 3012573002: Add tab.IsServiceWorkerReadyOrNotRegist() which tells whether serviceworker registration is finished (Closed)
Patch Set: fix presubmit error Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: telemetry/telemetry/internal/browser/wait_for_serviceworker_registration.js
diff --git a/telemetry/telemetry/internal/browser/wait_for_serviceworker_registration.js b/telemetry/telemetry/internal/browser/wait_for_serviceworker_registration.js
new file mode 100644
index 0000000000000000000000000000000000000000..20e645233d984d3eadddd5a4a454891160a21239
--- /dev/null
+++ b/telemetry/telemetry/internal/browser/wait_for_serviceworker_registration.js
@@ -0,0 +1,40 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+'use strict';
+
+/**
+ * @fileoverview This file provides a JavaScript helper function that
+ * determines whether service worker registration has completed.
+ */
+(function() {
+ // Make executing this code idempotent.
+ if (window.__telemetry_queryServiceWorkerState) {
+ return;
+ }
+
+ // These variable is used for detecting and waiting service worker
falken 2017/09/05 02:16:45 "variable is" => "variables are", "waiting" => "wa
+ // registration.
+ let isServiceWorkerRegistered = false;
+ let isServiceWorkerReady = false;
+
+ // Patch navigator.serviceWorker.register
falken 2017/09/05 02:16:45 I'm not familiar with telemetry style, but probabl
+ navigator.serviceWorker.originalRegister = navigator.serviceWorker.register;
+ navigator.serviceWorker.register = (name, options = {}) => {
+ isServiceWorkerRegistered = true;
+ navigator.serviceWorker.originalRegister(name, options);
+ };
+
+ navigator.serviceWorker.ready.then(
+ (registration) => { isServiceWorkerReady = true; });
+
+ window.__telemetry_queryServiceWorkerState = () => {
+ // These return string should exactly match strings used in
+ // ServiceWorkerState, in web_contents.py
falken 2017/09/05 02:16:44 ditto with '.'
+ if (!isServiceWorkerRegistered) {
+ return isServiceWorkerReady ? 'unknown state' : 'not registered';
falken 2017/09/05 02:16:44 maybe 'unknown state' => 'error: ready but registe
+ }
+ return isServiceWorkerReady ? 'activated' : 'installing';
falken 2017/09/05 02:16:44 'activated' is slightly misleading since when .rea
+ };
+})();

Powered by Google App Engine
This is Rietveld 408576698