| // Copyright 2016 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. |
| /** |
| * @unrestricted |
| */ |
| export default class SecurityOriginManager extends SDK.SDKModel { |
| /** |
| * @param {!SDK.Target} target |
| */ |
| constructor(target) { |
| super(target); |
| |
| // if a URL is unreachable, the browser will jump to an error page at |
| // 'chrome-error://chromewebdata/', and |this._mainSecurityOrigin| stores |
| // its origin. In this situation, the original unreachable URL's security |
| // origin will be stored in |this._unreachableMainSecurityOrigin|. |
| this._mainSecurityOrigin = ''; |
| this._unreachableMainSecurityOrigin = ''; |
| |
| /** @type {!Set<string>} */ |
| this._securityOrigins = new Set(); |
| } |
| |
| /** |
| * @param {!Set<string>} securityOrigins |
| */ |
| updateSecurityOrigins(securityOrigins) { |
| const oldOrigins = this._securityOrigins; |
| this._securityOrigins = securityOrigins; |
| |
| for (const origin of oldOrigins) { |
| if (!this._securityOrigins.has(origin)) { |
| this.dispatchEventToListeners(Events.SecurityOriginRemoved, origin); |
| } |
| } |
| |
| for (const origin of this._securityOrigins) { |
| if (!oldOrigins.has(origin)) { |
| this.dispatchEventToListeners(Events.SecurityOriginAdded, origin); |
| } |
| } |
| } |
| |
| /** |
| * @return {!Array<string>} |
| */ |
| securityOrigins() { |
| return this._securityOrigins.valuesArray(); |
| } |
| |
| /** |
| * @return {string} |
| */ |
| mainSecurityOrigin() { |
| return this._mainSecurityOrigin; |
| } |
| |
| /** |
| * @return {string} |
| */ |
| unreachableMainSecurityOrigin() { |
| return this._unreachableMainSecurityOrigin; |
| } |
| |
| /** |
| * @param {string} securityOrigin |
| * @param {string} unreachableSecurityOrigin |
| */ |
| setMainSecurityOrigin(securityOrigin, unreachableSecurityOrigin) { |
| this._mainSecurityOrigin = securityOrigin; |
| this._unreachableMainSecurityOrigin = unreachableSecurityOrigin || null; |
| this.dispatchEventToListeners(Events.MainSecurityOriginChanged, { |
| mainSecurityOrigin: this._mainSecurityOrigin, |
| unreachableMainSecurityOrigin: this._unreachableMainSecurityOrigin |
| }); |
| } |
| } |
| |
| /** @enum {symbol} */ |
| export const Events = { |
| SecurityOriginAdded: Symbol('SecurityOriginAdded'), |
| SecurityOriginRemoved: Symbol('SecurityOriginRemoved'), |
| MainSecurityOriginChanged: Symbol('MainSecurityOriginChanged') |
| }; |
| |
| /* Legacy exported object */ |
| self.SDK = self.SDK || {}; |
| |
| /* Legacy exported object */ |
| SDK = SDK || {}; |
| |
| /** @constructor */ |
| SDK.SecurityOriginManager = SecurityOriginManager; |
| |
| /** @enum {symbol} */ |
| SDK.SecurityOriginManager.Events = Events; |
| |
| // TODO(jarhar): this is the only usage of Capability.None. Do something about it! |
| SDK.SDKModel.register(SDK.SecurityOriginManager, SDK.Target.Capability.None, false); |