1e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)// found in the LICENSE file. 4e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 5e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)/** 6e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @constructor 7e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @extends {WebInspector.Object} 8e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */ 9e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebInspector.Lock = function() 10e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 11e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._count = 0; // Reentrant. 12e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 13e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 14e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)/** 15e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @enum {string} 16e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */ 17e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebInspector.Lock.Events = { 18e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) StateChanged: "StateChanged" 19e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 20e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 21e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebInspector.Lock.prototype = { 22e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) /** 23e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @return {boolean} 24e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */ 25e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) isAcquired: function() 26e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 27e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return !!this._count; 28e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) }, 29e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 30e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) acquire: function() 31e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 32e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (++this._count === 1) 33e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this.dispatchEventToListeners(WebInspector.Lock.Events.StateChanged); 34e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) }, 35e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 36e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) release: function() 37e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 38e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) --this._count; 39e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (this._count < 0) { 40e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) console.error("WebInspector.Lock acquire/release calls are unbalanced " + new Error().stack); 41e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return; 42e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 43e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (!this._count) 44e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this.dispatchEventToListeners(WebInspector.Lock.Events.StateChanged); 45e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) }, 46e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 47e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) __proto__: WebInspector.Object.prototype 48e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 49