| Index: third_party/WebKit/Source/devtools/front_end/resources/ServiceWorkersView.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/resources/ServiceWorkersView.js b/third_party/WebKit/Source/devtools/front_end/resources/ServiceWorkersView.js
|
| index e45533ea44fd4afdd349afc8f2a10d71e834246f..8927fde39a32de1bf038f433f78c56d234d6ff20 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/resources/ServiceWorkersView.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/resources/ServiceWorkersView.js
|
| @@ -1,17 +1,15 @@
|
| // Copyright (c) 2015 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.
|
| -
|
| /**
|
| - * @constructor
|
| - * @extends {WebInspector.VBox}
|
| * @implements {WebInspector.TargetManager.Observer}
|
| + * @unrestricted
|
| */
|
| -WebInspector.ServiceWorkersView = function()
|
| -{
|
| - WebInspector.VBox.call(this, true);
|
| +WebInspector.ServiceWorkersView = class extends WebInspector.VBox {
|
| + constructor() {
|
| + super(true);
|
|
|
| - this._reportView = new WebInspector.ReportView(WebInspector.UIString("Service Workers"));
|
| + this._reportView = new WebInspector.ReportView(WebInspector.UIString('Service Workers'));
|
| this._reportView.show(this.contentElement);
|
|
|
| this._toolbar = this._reportView.createToolbar();
|
| @@ -20,130 +18,134 @@ WebInspector.ServiceWorkersView = function()
|
| this._sections = new Map();
|
|
|
| this._toolbar.appendToolbarItem(WebInspector.NetworkConditionsSelector.createOfflineToolbarCheckbox());
|
| - var forceUpdate = new WebInspector.ToolbarCheckbox(WebInspector.UIString("Update on reload"), WebInspector.UIString("Force update Service Worker on page reload"), WebInspector.settings.createSetting("serviceWorkerUpdateOnReload", false));
|
| + var forceUpdate = new WebInspector.ToolbarCheckbox(
|
| + WebInspector.UIString('Update on reload'), WebInspector.UIString('Force update Service Worker on page reload'),
|
| + WebInspector.settings.createSetting('serviceWorkerUpdateOnReload', false));
|
| this._toolbar.appendToolbarItem(forceUpdate);
|
| - var fallbackToNetwork = new WebInspector.ToolbarCheckbox(WebInspector.UIString("Bypass for network"), WebInspector.UIString("Bypass Service Worker and load resources from the network"), WebInspector.settings.createSetting("bypassServiceWorker", false));
|
| + var fallbackToNetwork = new WebInspector.ToolbarCheckbox(
|
| + WebInspector.UIString('Bypass for network'),
|
| + WebInspector.UIString('Bypass Service Worker and load resources from the network'),
|
| + WebInspector.settings.createSetting('bypassServiceWorker', false));
|
| this._toolbar.appendToolbarItem(fallbackToNetwork);
|
| this._toolbar.appendSpacer();
|
| - this._showAllCheckbox = new WebInspector.ToolbarCheckbox(WebInspector.UIString("Show all"), WebInspector.UIString("Show all Service Workers regardless of the origin"));
|
| - this._showAllCheckbox.inputElement.addEventListener("change", this._updateSectionVisibility.bind(this), false);
|
| + this._showAllCheckbox = new WebInspector.ToolbarCheckbox(
|
| + WebInspector.UIString('Show all'), WebInspector.UIString('Show all Service Workers regardless of the origin'));
|
| + this._showAllCheckbox.inputElement.addEventListener('change', this._updateSectionVisibility.bind(this), false);
|
| this._toolbar.appendToolbarItem(this._showAllCheckbox);
|
|
|
| /** @type {!Map<!WebInspector.Target, !Array<!WebInspector.EventTarget.EventDescriptor>>}*/
|
| this._eventListeners = new Map();
|
| WebInspector.targetManager.observeTargets(this);
|
| -};
|
| -
|
| -WebInspector.ServiceWorkersView.prototype = {
|
| - /**
|
| - * @override
|
| - * @param {!WebInspector.Target} target
|
| - */
|
| - targetAdded: function(target)
|
| - {
|
| - if (this._manager || !target.serviceWorkerManager)
|
| - return;
|
| - this._manager = target.serviceWorkerManager;
|
| - this._subTargetsManager = target.subTargetsManager;
|
| - this._securityOriginManager = WebInspector.SecurityOriginManager.fromTarget(target);
|
| -
|
| - for (var registration of this._manager.registrations().values())
|
| - this._updateRegistration(registration);
|
| -
|
| - this._eventListeners.set(target, [
|
| - this._manager.addEventListener(WebInspector.ServiceWorkerManager.Events.RegistrationUpdated, this._registrationUpdated, this),
|
| - this._manager.addEventListener(WebInspector.ServiceWorkerManager.Events.RegistrationDeleted, this._registrationDeleted, this),
|
| - this._manager.addEventListener(WebInspector.ServiceWorkerManager.Events.RegistrationErrorAdded, this._registrationErrorAdded, this),
|
| - this._securityOriginManager.addEventListener(WebInspector.SecurityOriginManager.Events.SecurityOriginAdded, this._updateSectionVisibility, this),
|
| - this._securityOriginManager.addEventListener(WebInspector.SecurityOriginManager.Events.SecurityOriginRemoved, this._updateSectionVisibility, this),
|
| - ]);
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @param {!WebInspector.Target} target
|
| - */
|
| - targetRemoved: function(target)
|
| - {
|
| - if (!this._manager || this._manager !== target.serviceWorkerManager)
|
| - return;
|
| -
|
| - WebInspector.EventTarget.removeEventListeners(this._eventListeners.get(target));
|
| - this._eventListeners.delete(target);
|
| - this._manager = null;
|
| - this._subTargetsManager = null;
|
| - this._securityOriginManager = null;
|
| - },
|
| -
|
| - _updateSectionVisibility: function()
|
| - {
|
| - var securityOrigins = new Set(this._securityOriginManager.securityOrigins());
|
| - for (var section of this._sections.values()) {
|
| - var visible = this._showAllCheckbox.checked() || securityOrigins.has(section._registration.securityOrigin);
|
| - section._section.element.classList.toggle("hidden", !visible);
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _registrationUpdated: function(event)
|
| - {
|
| - var registration = /** @type {!WebInspector.ServiceWorkerRegistration} */ (event.data);
|
| - this._updateRegistration(registration);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _registrationErrorAdded: function(event)
|
| - {
|
| - var registration = /** @type {!WebInspector.ServiceWorkerRegistration} */ (event.data["registration"]);
|
| - var error = /** @type {!ServiceWorkerAgent.ServiceWorkerErrorMessage} */ (event.data["error"]);
|
| - var section = this._sections.get(registration);
|
| - if (!section)
|
| - return;
|
| - section._addError(error);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.ServiceWorkerRegistration} registration
|
| - */
|
| - _updateRegistration: function(registration)
|
| - {
|
| - var section = this._sections.get(registration);
|
| - if (!section) {
|
| - section = new WebInspector.ServiceWorkersView.Section(this._manager, this._subTargetsManager, this._reportView.appendSection(""), registration);
|
| - this._sections.set(registration, section);
|
| - }
|
| - this._updateSectionVisibility();
|
| - section._scheduleUpdate();
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _registrationDeleted: function(event)
|
| - {
|
| - var registration = /** @type {!WebInspector.ServiceWorkerRegistration} */ (event.data);
|
| - var section = this._sections.get(registration);
|
| - if (section)
|
| - section._section.remove();
|
| - this._sections.delete(registration);
|
| - },
|
| -
|
| - __proto__: WebInspector.VBox.prototype
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!WebInspector.Target} target
|
| + */
|
| + targetAdded(target) {
|
| + if (this._manager || !target.serviceWorkerManager)
|
| + return;
|
| + this._manager = target.serviceWorkerManager;
|
| + this._subTargetsManager = target.subTargetsManager;
|
| + this._securityOriginManager = WebInspector.SecurityOriginManager.fromTarget(target);
|
| +
|
| + for (var registration of this._manager.registrations().values())
|
| + this._updateRegistration(registration);
|
| +
|
| + this._eventListeners.set(target, [
|
| + this._manager.addEventListener(
|
| + WebInspector.ServiceWorkerManager.Events.RegistrationUpdated, this._registrationUpdated, this),
|
| + this._manager.addEventListener(
|
| + WebInspector.ServiceWorkerManager.Events.RegistrationDeleted, this._registrationDeleted, this),
|
| + this._manager.addEventListener(
|
| + WebInspector.ServiceWorkerManager.Events.RegistrationErrorAdded, this._registrationErrorAdded, this),
|
| + this._securityOriginManager.addEventListener(
|
| + WebInspector.SecurityOriginManager.Events.SecurityOriginAdded, this._updateSectionVisibility, this),
|
| + this._securityOriginManager.addEventListener(
|
| + WebInspector.SecurityOriginManager.Events.SecurityOriginRemoved, this._updateSectionVisibility, this),
|
| + ]);
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!WebInspector.Target} target
|
| + */
|
| + targetRemoved(target) {
|
| + if (!this._manager || this._manager !== target.serviceWorkerManager)
|
| + return;
|
| +
|
| + WebInspector.EventTarget.removeEventListeners(this._eventListeners.get(target));
|
| + this._eventListeners.delete(target);
|
| + this._manager = null;
|
| + this._subTargetsManager = null;
|
| + this._securityOriginManager = null;
|
| + }
|
| +
|
| + _updateSectionVisibility() {
|
| + var securityOrigins = new Set(this._securityOriginManager.securityOrigins());
|
| + for (var section of this._sections.values()) {
|
| + var visible = this._showAllCheckbox.checked() || securityOrigins.has(section._registration.securityOrigin);
|
| + section._section.element.classList.toggle('hidden', !visible);
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _registrationUpdated(event) {
|
| + var registration = /** @type {!WebInspector.ServiceWorkerRegistration} */ (event.data);
|
| + this._updateRegistration(registration);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _registrationErrorAdded(event) {
|
| + var registration = /** @type {!WebInspector.ServiceWorkerRegistration} */ (event.data['registration']);
|
| + var error = /** @type {!ServiceWorkerAgent.ServiceWorkerErrorMessage} */ (event.data['error']);
|
| + var section = this._sections.get(registration);
|
| + if (!section)
|
| + return;
|
| + section._addError(error);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.ServiceWorkerRegistration} registration
|
| + */
|
| + _updateRegistration(registration) {
|
| + var section = this._sections.get(registration);
|
| + if (!section) {
|
| + section = new WebInspector.ServiceWorkersView.Section(
|
| + this._manager, this._subTargetsManager, this._reportView.appendSection(''), registration);
|
| + this._sections.set(registration, section);
|
| + }
|
| + this._updateSectionVisibility();
|
| + section._scheduleUpdate();
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _registrationDeleted(event) {
|
| + var registration = /** @type {!WebInspector.ServiceWorkerRegistration} */ (event.data);
|
| + var section = this._sections.get(registration);
|
| + if (section)
|
| + section._section.remove();
|
| + this._sections.delete(registration);
|
| + }
|
| };
|
|
|
| /**
|
| - * @constructor
|
| - * @param {!WebInspector.ServiceWorkerManager} manager
|
| - * @param {!WebInspector.SubTargetsManager} subTargetsManager
|
| - * @param {!WebInspector.ReportView.Section} section
|
| - * @param {!WebInspector.ServiceWorkerRegistration} registration
|
| + * @unrestricted
|
| */
|
| -WebInspector.ServiceWorkersView.Section = function(manager, subTargetsManager, section, registration)
|
| -{
|
| +WebInspector.ServiceWorkersView.Section = class {
|
| + /**
|
| + * @param {!WebInspector.ServiceWorkerManager} manager
|
| + * @param {!WebInspector.SubTargetsManager} subTargetsManager
|
| + * @param {!WebInspector.ReportView.Section} section
|
| + * @param {!WebInspector.ServiceWorkerRegistration} registration
|
| + */
|
| + constructor(manager, subTargetsManager, section, registration) {
|
| this._manager = manager;
|
| this._subTargetsManager = subTargetsManager;
|
| this._section = section;
|
| @@ -151,286 +153,279 @@ WebInspector.ServiceWorkersView.Section = function(manager, subTargetsManager, s
|
|
|
| this._toolbar = section.createToolbar();
|
| this._toolbar.renderAsLinks();
|
| - this._updateButton = new WebInspector.ToolbarButton(WebInspector.UIString("Update"), undefined, WebInspector.UIString("Update"));
|
| - this._updateButton.addEventListener("click", this._updateButtonClicked.bind(this));
|
| + this._updateButton =
|
| + new WebInspector.ToolbarButton(WebInspector.UIString('Update'), undefined, WebInspector.UIString('Update'));
|
| + this._updateButton.addEventListener('click', this._updateButtonClicked.bind(this));
|
| this._toolbar.appendToolbarItem(this._updateButton);
|
| - this._pushButton = new WebInspector.ToolbarButton(WebInspector.UIString("Emulate push event"), undefined, WebInspector.UIString("Push"));
|
| - this._pushButton.addEventListener("click", this._pushButtonClicked.bind(this));
|
| + this._pushButton = new WebInspector.ToolbarButton(
|
| + WebInspector.UIString('Emulate push event'), undefined, WebInspector.UIString('Push'));
|
| + this._pushButton.addEventListener('click', this._pushButtonClicked.bind(this));
|
| this._toolbar.appendToolbarItem(this._pushButton);
|
| - this._syncButton = new WebInspector.ToolbarButton(WebInspector.UIString("Emulate background sync event"), undefined, WebInspector.UIString("Sync"));
|
| - this._syncButton.addEventListener("click", this._syncButtonClicked.bind(this));
|
| + this._syncButton = new WebInspector.ToolbarButton(
|
| + WebInspector.UIString('Emulate background sync event'), undefined, WebInspector.UIString('Sync'));
|
| + this._syncButton.addEventListener('click', this._syncButtonClicked.bind(this));
|
| this._toolbar.appendToolbarItem(this._syncButton);
|
| - this._deleteButton = new WebInspector.ToolbarButton(WebInspector.UIString("Unregister service worker"), undefined, WebInspector.UIString("Unregister"));
|
| - this._deleteButton.addEventListener("click", this._unregisterButtonClicked.bind(this));
|
| + this._deleteButton = new WebInspector.ToolbarButton(
|
| + WebInspector.UIString('Unregister service worker'), undefined, WebInspector.UIString('Unregister'));
|
| + this._deleteButton.addEventListener('click', this._unregisterButtonClicked.bind(this));
|
| this._toolbar.appendToolbarItem(this._deleteButton);
|
|
|
| // Preserve the order.
|
| - this._section.appendField(WebInspector.UIString("Source"));
|
| - this._section.appendField(WebInspector.UIString("Status"));
|
| - this._section.appendField(WebInspector.UIString("Clients"));
|
| - this._section.appendField(WebInspector.UIString("Errors"));
|
| + this._section.appendField(WebInspector.UIString('Source'));
|
| + this._section.appendField(WebInspector.UIString('Status'));
|
| + this._section.appendField(WebInspector.UIString('Clients'));
|
| + this._section.appendField(WebInspector.UIString('Errors'));
|
| this._errorsList = this._wrapWidget(this._section.appendRow());
|
| - this._errorsList.classList.add("service-worker-error-stack", "monospace", "hidden");
|
| + this._errorsList.classList.add('service-worker-error-stack', 'monospace', 'hidden');
|
|
|
| this._linkifier = new WebInspector.Linkifier();
|
| /** @type {!Map<string, !WebInspector.TargetInfo>} */
|
| this._clientInfoCache = new Map();
|
| for (var error of registration.errors)
|
| - this._addError(error);
|
| + this._addError(error);
|
| this._throttler = new WebInspector.Throttler(500);
|
| -};
|
| -
|
| -WebInspector.ServiceWorkersView.Section.prototype = {
|
| - _scheduleUpdate: function()
|
| - {
|
| - if (WebInspector.ServiceWorkersView._noThrottle) {
|
| - this._update();
|
| - return;
|
| - }
|
| - this._throttler.schedule(this._update.bind(this));
|
| - },
|
| -
|
| - /**
|
| - * @param {string} versionId
|
| - * @return {?WebInspector.Target}
|
| - */
|
| - _targetForVersionId: function(versionId)
|
| - {
|
| - var version = this._manager.findVersion(versionId);
|
| - if (!version || !version.targetId)
|
| - return null;
|
| - return this._subTargetsManager.targetForId(version.targetId);
|
| - },
|
| -
|
| - /**
|
| - * @return {!Promise}
|
| - */
|
| - _update: function()
|
| - {
|
| - var fingerprint = this._registration.fingerprint();
|
| - if (fingerprint === this._fingerprint)
|
| - return Promise.resolve();
|
| - this._fingerprint = fingerprint;
|
| -
|
| - this._toolbar.setEnabled(!this._registration.isDeleted);
|
| -
|
| - var versions = this._registration.versionsByMode();
|
| - var title = this._registration.isDeleted ? WebInspector.UIString("%s - deleted", this._registration.scopeURL) : this._registration.scopeURL;
|
| - this._section.setTitle(title);
|
| -
|
| - var active = versions.get(WebInspector.ServiceWorkerVersion.Modes.Active);
|
| - var waiting = versions.get(WebInspector.ServiceWorkerVersion.Modes.Waiting);
|
| - var installing = versions.get(WebInspector.ServiceWorkerVersion.Modes.Installing);
|
| -
|
| - var statusValue = this._wrapWidget(this._section.appendField(WebInspector.UIString("Status")));
|
| - statusValue.removeChildren();
|
| - var versionsStack = statusValue.createChild("div", "service-worker-version-stack");
|
| - versionsStack.createChild("div", "service-worker-version-stack-bar");
|
| -
|
| - if (active) {
|
| - var scriptElement = this._section.appendField(WebInspector.UIString("Source"));
|
| - scriptElement.removeChildren();
|
| - var fileName = WebInspector.ParsedURL.extractName(active.scriptURL);
|
| - scriptElement.appendChild(WebInspector.linkifyURLAsNode(active.scriptURL, fileName));
|
| - scriptElement.createChild("div", "report-field-value-subtitle").textContent = WebInspector.UIString("Received %s", new Date(active.scriptResponseTime * 1000).toLocaleString());
|
| -
|
| - var activeEntry = versionsStack.createChild("div", "service-worker-version");
|
| - activeEntry.createChild("div", "service-worker-active-circle");
|
| - activeEntry.createChild("span").textContent = WebInspector.UIString("#%s activated and is %s", active.id, active.runningStatus);
|
| -
|
| - if (active.isRunning() || active.isStarting()) {
|
| - createLink(activeEntry, WebInspector.UIString("stop"), this._stopButtonClicked.bind(this, active.id));
|
| - if (!this._targetForVersionId(active.id))
|
| - createLink(activeEntry, WebInspector.UIString("inspect"), this._inspectButtonClicked.bind(this, active.id));
|
| - } else if (active.isStartable()) {
|
| - createLink(activeEntry, WebInspector.UIString("start"), this._startButtonClicked.bind(this));
|
| - }
|
| -
|
| - var clientsList = this._wrapWidget(this._section.appendField(WebInspector.UIString("Clients")));
|
| - clientsList.removeChildren();
|
| - this._section.setFieldVisible(WebInspector.UIString("Clients"), active.controlledClients.length);
|
| - for (var client of active.controlledClients) {
|
| - var clientLabelText = clientsList.createChild("div", "service-worker-client");
|
| - if (this._clientInfoCache.has(client))
|
| - this._updateClientInfo(clientLabelText, /** @type {!WebInspector.TargetInfo} */(this._clientInfoCache.get(client)));
|
| - this._subTargetsManager.getTargetInfo(client, this._onClientInfo.bind(this, clientLabelText));
|
| - }
|
| - }
|
| -
|
| - if (waiting) {
|
| - var waitingEntry = versionsStack.createChild("div", "service-worker-version");
|
| - waitingEntry.createChild("div", "service-worker-waiting-circle");
|
| - waitingEntry.createChild("span").textContent = WebInspector.UIString("#%s waiting to activate", waiting.id);
|
| - createLink(waitingEntry, WebInspector.UIString("skipWaiting"), this._skipButtonClicked.bind(this));
|
| - waitingEntry.createChild("div", "service-worker-subtitle").textContent = new Date(waiting.scriptResponseTime * 1000).toLocaleString();
|
| - if (!this._targetForVersionId(waiting.id) && (waiting.isRunning() || waiting.isStarting()))
|
| - createLink(waitingEntry, WebInspector.UIString("inspect"), this._inspectButtonClicked.bind(this, waiting.id));
|
| - }
|
| - if (installing) {
|
| - var installingEntry = versionsStack.createChild("div", "service-worker-version");
|
| - installingEntry.createChild("div", "service-worker-installing-circle");
|
| - installingEntry.createChild("span").textContent = WebInspector.UIString("#%s installing", installing.id);
|
| - installingEntry.createChild("div", "service-worker-subtitle").textContent = new Date(installing.scriptResponseTime * 1000).toLocaleString();
|
| - if (!this._targetForVersionId(installing.id) && (installing.isRunning() || installing.isStarting()))
|
| - createLink(installingEntry, WebInspector.UIString("inspect"), this._inspectButtonClicked.bind(this, installing.id));
|
| - }
|
| -
|
| - this._section.setFieldVisible(WebInspector.UIString("Errors"), !!this._registration.errors.length);
|
| - var errorsValue = this._wrapWidget(this._section.appendField(WebInspector.UIString("Errors")));
|
| - var errorsLabel = createLabel(String(this._registration.errors.length), "error-icon");
|
| - errorsLabel.classList.add("service-worker-errors-label");
|
| - errorsValue.appendChild(errorsLabel);
|
| - this._moreButton = createLink(errorsValue, this._errorsList.classList.contains("hidden") ? WebInspector.UIString("details") : WebInspector.UIString("hide"), this._moreErrorsButtonClicked.bind(this));
|
| - createLink(errorsValue, WebInspector.UIString("clear"), this._clearErrorsButtonClicked.bind(this));
|
| -
|
| - /**
|
| - * @param {!Element} parent
|
| - * @param {string} title
|
| - * @param {function()} listener
|
| - * @return {!Element}
|
| - */
|
| - function createLink(parent, title, listener)
|
| - {
|
| - var span = parent.createChild("span", "link");
|
| - span.textContent = title;
|
| - span.addEventListener("click", listener, false);
|
| - return span;
|
| - }
|
| - return Promise.resolve();
|
| - },
|
| -
|
| - /**
|
| - * @param {!ServiceWorkerAgent.ServiceWorkerErrorMessage} error
|
| - */
|
| - _addError: function(error)
|
| - {
|
| - var target = this._targetForVersionId(error.versionId);
|
| - var message = this._errorsList.createChild("div");
|
| - if (this._errorsList.childElementCount > 100)
|
| - this._errorsList.firstElementChild.remove();
|
| - message.appendChild(this._linkifier.linkifyScriptLocation(target, null, error.sourceURL, error.lineNumber));
|
| - message.appendChild(createLabel("#" + error.versionId + ": " + error.errorMessage, "error-icon"));
|
| - },
|
| -
|
| - _unregisterButtonClicked: function()
|
| - {
|
| - this._manager.deleteRegistration(this._registration.id);
|
| - },
|
| -
|
| - _updateButtonClicked: function()
|
| - {
|
| - this._manager.updateRegistration(this._registration.id);
|
| - },
|
| -
|
| - _pushButtonClicked: function()
|
| - {
|
| - var data = "Test push message from DevTools.";
|
| - this._manager.deliverPushMessage(this._registration.id, data);
|
| - },
|
| -
|
| - _syncButtonClicked: function()
|
| - {
|
| - var tag = "test-tag-from-devtools";
|
| - var lastChance = true;
|
| - this._manager.dispatchSyncEvent(this._registration.id, tag, lastChance);
|
| - },
|
| -
|
| - /**
|
| - * @param {!Element} element
|
| - * @param {?WebInspector.TargetInfo} targetInfo
|
| - */
|
| - _onClientInfo: function(element, targetInfo)
|
| - {
|
| - if (!targetInfo)
|
| - return;
|
| - this._clientInfoCache.set(targetInfo.id, targetInfo);
|
| - this._updateClientInfo(element, targetInfo);
|
| - },
|
| -
|
| - /**
|
| - * @param {!Element} element
|
| - * @param {!WebInspector.TargetInfo} targetInfo
|
| - */
|
| - _updateClientInfo: function(element, targetInfo)
|
| - {
|
| - if (!targetInfo.canActivate) {
|
| - element.createTextChild(targetInfo.title);
|
| - return;
|
| - }
|
| - element.removeChildren();
|
| - element.createTextChild(targetInfo.url);
|
| - var focusLabel = element.createChild("label", "link");
|
| - focusLabel.createTextChild("focus");
|
| - focusLabel.addEventListener("click", this._activateTarget.bind(this, targetInfo.id), true);
|
| - },
|
| + }
|
|
|
| - /**
|
| - * @param {string} targetId
|
| - */
|
| - _activateTarget: function(targetId)
|
| - {
|
| - this._subTargetsManager.activateTarget(targetId);
|
| - },
|
| -
|
| - _startButtonClicked: function()
|
| - {
|
| - this._manager.startWorker(this._registration.scopeURL);
|
| - },
|
| -
|
| - _skipButtonClicked: function()
|
| - {
|
| - this._manager.skipWaiting(this._registration.scopeURL);
|
| - },
|
| + _scheduleUpdate() {
|
| + if (WebInspector.ServiceWorkersView._noThrottle) {
|
| + this._update();
|
| + return;
|
| + }
|
| + this._throttler.schedule(this._update.bind(this));
|
| + }
|
| +
|
| + /**
|
| + * @param {string} versionId
|
| + * @return {?WebInspector.Target}
|
| + */
|
| + _targetForVersionId(versionId) {
|
| + var version = this._manager.findVersion(versionId);
|
| + if (!version || !version.targetId)
|
| + return null;
|
| + return this._subTargetsManager.targetForId(version.targetId);
|
| + }
|
| +
|
| + /**
|
| + * @return {!Promise}
|
| + */
|
| + _update() {
|
| + var fingerprint = this._registration.fingerprint();
|
| + if (fingerprint === this._fingerprint)
|
| + return Promise.resolve();
|
| + this._fingerprint = fingerprint;
|
| +
|
| + this._toolbar.setEnabled(!this._registration.isDeleted);
|
| +
|
| + var versions = this._registration.versionsByMode();
|
| + var title = this._registration.isDeleted ? WebInspector.UIString('%s - deleted', this._registration.scopeURL) :
|
| + this._registration.scopeURL;
|
| + this._section.setTitle(title);
|
| +
|
| + var active = versions.get(WebInspector.ServiceWorkerVersion.Modes.Active);
|
| + var waiting = versions.get(WebInspector.ServiceWorkerVersion.Modes.Waiting);
|
| + var installing = versions.get(WebInspector.ServiceWorkerVersion.Modes.Installing);
|
| +
|
| + var statusValue = this._wrapWidget(this._section.appendField(WebInspector.UIString('Status')));
|
| + statusValue.removeChildren();
|
| + var versionsStack = statusValue.createChild('div', 'service-worker-version-stack');
|
| + versionsStack.createChild('div', 'service-worker-version-stack-bar');
|
| +
|
| + if (active) {
|
| + var scriptElement = this._section.appendField(WebInspector.UIString('Source'));
|
| + scriptElement.removeChildren();
|
| + var fileName = WebInspector.ParsedURL.extractName(active.scriptURL);
|
| + scriptElement.appendChild(WebInspector.linkifyURLAsNode(active.scriptURL, fileName));
|
| + scriptElement.createChild('div', 'report-field-value-subtitle').textContent =
|
| + WebInspector.UIString('Received %s', new Date(active.scriptResponseTime * 1000).toLocaleString());
|
| +
|
| + var activeEntry = versionsStack.createChild('div', 'service-worker-version');
|
| + activeEntry.createChild('div', 'service-worker-active-circle');
|
| + activeEntry.createChild('span').textContent =
|
| + WebInspector.UIString('#%s activated and is %s', active.id, active.runningStatus);
|
| +
|
| + if (active.isRunning() || active.isStarting()) {
|
| + createLink(activeEntry, WebInspector.UIString('stop'), this._stopButtonClicked.bind(this, active.id));
|
| + if (!this._targetForVersionId(active.id))
|
| + createLink(activeEntry, WebInspector.UIString('inspect'), this._inspectButtonClicked.bind(this, active.id));
|
| + } else if (active.isStartable()) {
|
| + createLink(activeEntry, WebInspector.UIString('start'), this._startButtonClicked.bind(this));
|
| + }
|
| +
|
| + var clientsList = this._wrapWidget(this._section.appendField(WebInspector.UIString('Clients')));
|
| + clientsList.removeChildren();
|
| + this._section.setFieldVisible(WebInspector.UIString('Clients'), active.controlledClients.length);
|
| + for (var client of active.controlledClients) {
|
| + var clientLabelText = clientsList.createChild('div', 'service-worker-client');
|
| + if (this._clientInfoCache.has(client))
|
| + this._updateClientInfo(
|
| + clientLabelText, /** @type {!WebInspector.TargetInfo} */ (this._clientInfoCache.get(client)));
|
| + this._subTargetsManager.getTargetInfo(client, this._onClientInfo.bind(this, clientLabelText));
|
| + }
|
| + }
|
|
|
| - /**
|
| - * @param {string} versionId
|
| - */
|
| - _stopButtonClicked: function(versionId)
|
| - {
|
| - this._manager.stopWorker(versionId);
|
| - },
|
| -
|
| - _moreErrorsButtonClicked: function()
|
| - {
|
| - var newVisible = this._errorsList.classList.contains("hidden");
|
| - this._moreButton.textContent = newVisible ? WebInspector.UIString("hide") : WebInspector.UIString("details");
|
| - this._errorsList.classList.toggle("hidden", !newVisible);
|
| - },
|
| -
|
| - _clearErrorsButtonClicked: function()
|
| - {
|
| - this._errorsList.removeChildren();
|
| - this._registration.clearErrors();
|
| - this._scheduleUpdate();
|
| - if (!this._errorsList.classList.contains("hidden"))
|
| - this._moreErrorsButtonClicked();
|
| - },
|
| + if (waiting) {
|
| + var waitingEntry = versionsStack.createChild('div', 'service-worker-version');
|
| + waitingEntry.createChild('div', 'service-worker-waiting-circle');
|
| + waitingEntry.createChild('span').textContent = WebInspector.UIString('#%s waiting to activate', waiting.id);
|
| + createLink(waitingEntry, WebInspector.UIString('skipWaiting'), this._skipButtonClicked.bind(this));
|
| + waitingEntry.createChild('div', 'service-worker-subtitle').textContent =
|
| + new Date(waiting.scriptResponseTime * 1000).toLocaleString();
|
| + if (!this._targetForVersionId(waiting.id) && (waiting.isRunning() || waiting.isStarting()))
|
| + createLink(waitingEntry, WebInspector.UIString('inspect'), this._inspectButtonClicked.bind(this, waiting.id));
|
| + }
|
| + if (installing) {
|
| + var installingEntry = versionsStack.createChild('div', 'service-worker-version');
|
| + installingEntry.createChild('div', 'service-worker-installing-circle');
|
| + installingEntry.createChild('span').textContent = WebInspector.UIString('#%s installing', installing.id);
|
| + installingEntry.createChild('div', 'service-worker-subtitle').textContent =
|
| + new Date(installing.scriptResponseTime * 1000).toLocaleString();
|
| + if (!this._targetForVersionId(installing.id) && (installing.isRunning() || installing.isStarting()))
|
| + createLink(
|
| + installingEntry, WebInspector.UIString('inspect'), this._inspectButtonClicked.bind(this, installing.id));
|
| + }
|
|
|
| - /**
|
| - * @param {string} versionId
|
| - */
|
| - _inspectButtonClicked: function(versionId)
|
| - {
|
| - this._manager.inspectWorker(versionId);
|
| - },
|
| + this._section.setFieldVisible(WebInspector.UIString('Errors'), !!this._registration.errors.length);
|
| + var errorsValue = this._wrapWidget(this._section.appendField(WebInspector.UIString('Errors')));
|
| + var errorsLabel = createLabel(String(this._registration.errors.length), 'error-icon');
|
| + errorsLabel.classList.add('service-worker-errors-label');
|
| + errorsValue.appendChild(errorsLabel);
|
| + this._moreButton = createLink(
|
| + errorsValue, this._errorsList.classList.contains('hidden') ? WebInspector.UIString('details') :
|
| + WebInspector.UIString('hide'),
|
| + this._moreErrorsButtonClicked.bind(this));
|
| + createLink(errorsValue, WebInspector.UIString('clear'), this._clearErrorsButtonClicked.bind(this));
|
|
|
| /**
|
| - * @param {!Element} container
|
| + * @param {!Element} parent
|
| + * @param {string} title
|
| + * @param {function()} listener
|
| * @return {!Element}
|
| */
|
| - _wrapWidget: function(container)
|
| - {
|
| - var shadowRoot = WebInspector.createShadowRootWithCoreStyles(container);
|
| - WebInspector.appendStyle(shadowRoot, "resources/serviceWorkersView.css");
|
| - var contentElement = createElement("div");
|
| - shadowRoot.appendChild(contentElement);
|
| - return contentElement;
|
| - },
|
| -
|
| - _dispose: function()
|
| - {
|
| - this._linkifier.dispose();
|
| - if (this._pendingUpdate)
|
| - clearTimeout(this._pendingUpdate);
|
| + function createLink(parent, title, listener) {
|
| + var span = parent.createChild('span', 'link');
|
| + span.textContent = title;
|
| + span.addEventListener('click', listener, false);
|
| + return span;
|
| + }
|
| + return Promise.resolve();
|
| + }
|
| +
|
| + /**
|
| + * @param {!ServiceWorkerAgent.ServiceWorkerErrorMessage} error
|
| + */
|
| + _addError(error) {
|
| + var target = this._targetForVersionId(error.versionId);
|
| + var message = this._errorsList.createChild('div');
|
| + if (this._errorsList.childElementCount > 100)
|
| + this._errorsList.firstElementChild.remove();
|
| + message.appendChild(this._linkifier.linkifyScriptLocation(target, null, error.sourceURL, error.lineNumber));
|
| + message.appendChild(createLabel('#' + error.versionId + ': ' + error.errorMessage, 'error-icon'));
|
| + }
|
| +
|
| + _unregisterButtonClicked() {
|
| + this._manager.deleteRegistration(this._registration.id);
|
| + }
|
| +
|
| + _updateButtonClicked() {
|
| + this._manager.updateRegistration(this._registration.id);
|
| + }
|
| +
|
| + _pushButtonClicked() {
|
| + var data = 'Test push message from DevTools.';
|
| + this._manager.deliverPushMessage(this._registration.id, data);
|
| + }
|
| +
|
| + _syncButtonClicked() {
|
| + var tag = 'test-tag-from-devtools';
|
| + var lastChance = true;
|
| + this._manager.dispatchSyncEvent(this._registration.id, tag, lastChance);
|
| + }
|
| +
|
| + /**
|
| + * @param {!Element} element
|
| + * @param {?WebInspector.TargetInfo} targetInfo
|
| + */
|
| + _onClientInfo(element, targetInfo) {
|
| + if (!targetInfo)
|
| + return;
|
| + this._clientInfoCache.set(targetInfo.id, targetInfo);
|
| + this._updateClientInfo(element, targetInfo);
|
| + }
|
| +
|
| + /**
|
| + * @param {!Element} element
|
| + * @param {!WebInspector.TargetInfo} targetInfo
|
| + */
|
| + _updateClientInfo(element, targetInfo) {
|
| + if (!targetInfo.canActivate) {
|
| + element.createTextChild(targetInfo.title);
|
| + return;
|
| }
|
| + element.removeChildren();
|
| + element.createTextChild(targetInfo.url);
|
| + var focusLabel = element.createChild('label', 'link');
|
| + focusLabel.createTextChild('focus');
|
| + focusLabel.addEventListener('click', this._activateTarget.bind(this, targetInfo.id), true);
|
| + }
|
| +
|
| + /**
|
| + * @param {string} targetId
|
| + */
|
| + _activateTarget(targetId) {
|
| + this._subTargetsManager.activateTarget(targetId);
|
| + }
|
| +
|
| + _startButtonClicked() {
|
| + this._manager.startWorker(this._registration.scopeURL);
|
| + }
|
| +
|
| + _skipButtonClicked() {
|
| + this._manager.skipWaiting(this._registration.scopeURL);
|
| + }
|
| +
|
| + /**
|
| + * @param {string} versionId
|
| + */
|
| + _stopButtonClicked(versionId) {
|
| + this._manager.stopWorker(versionId);
|
| + }
|
| +
|
| + _moreErrorsButtonClicked() {
|
| + var newVisible = this._errorsList.classList.contains('hidden');
|
| + this._moreButton.textContent = newVisible ? WebInspector.UIString('hide') : WebInspector.UIString('details');
|
| + this._errorsList.classList.toggle('hidden', !newVisible);
|
| + }
|
| +
|
| + _clearErrorsButtonClicked() {
|
| + this._errorsList.removeChildren();
|
| + this._registration.clearErrors();
|
| + this._scheduleUpdate();
|
| + if (!this._errorsList.classList.contains('hidden'))
|
| + this._moreErrorsButtonClicked();
|
| + }
|
| +
|
| + /**
|
| + * @param {string} versionId
|
| + */
|
| + _inspectButtonClicked(versionId) {
|
| + this._manager.inspectWorker(versionId);
|
| + }
|
| +
|
| + /**
|
| + * @param {!Element} container
|
| + * @return {!Element}
|
| + */
|
| + _wrapWidget(container) {
|
| + var shadowRoot = WebInspector.createShadowRootWithCoreStyles(container);
|
| + WebInspector.appendStyle(shadowRoot, 'resources/serviceWorkersView.css');
|
| + var contentElement = createElement('div');
|
| + shadowRoot.appendChild(contentElement);
|
| + return contentElement;
|
| + }
|
| +
|
| + _dispose() {
|
| + this._linkifier.dispose();
|
| + if (this._pendingUpdate)
|
| + clearTimeout(this._pendingUpdate);
|
| + }
|
| };
|
|
|