| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This script contains privileged chrome extension related javascript APIs. | 5 // This script contains privileged chrome extension related javascript APIs. |
| 6 // It is loaded by pages whose URL has the chrome-extension protocol. | 6 // It is loaded by pages whose URL has the chrome-extension protocol. |
| 7 | 7 |
| 8 var chrome = chrome || {}; | 8 var chrome = chrome || {}; |
| 9 (function() { | 9 (function() { |
| 10 native function GetExtensionAPIDefinition(); | 10 native function GetExtensionAPIDefinition(); |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 cb.apply(null, [details, handledCallback]); | 262 cb.apply(null, [details, handledCallback]); |
| 263 }; | 263 }; |
| 264 } | 264 } |
| 265 this.subEvents_.push( | 265 this.subEvents_.push( |
| 266 {subEvent: subEvent, callback: cb, subEventCallback: subEventCallback}); | 266 {subEvent: subEvent, callback: cb, subEventCallback: subEventCallback}); |
| 267 subEvent.addListener(subEventCallback); | 267 subEvent.addListener(subEventCallback); |
| 268 }; | 268 }; |
| 269 | 269 |
| 270 // Unregisters a callback. | 270 // Unregisters a callback. |
| 271 chrome.WebRequestEvent.prototype.removeListener = function(cb) { | 271 chrome.WebRequestEvent.prototype.removeListener = function(cb) { |
| 272 var idx = this.findListener_(cb); | 272 var idx; |
| 273 if (idx < 0) { | 273 while ((idx = this.findListener_(cb)) >= 0) { |
| 274 return; | 274 var e = this.subEvents_[idx]; |
| 275 e.subEvent.removeListener(e.subEventCallback); |
| 276 if (e.subEvent.hasListeners()) { |
| 277 console.error( |
| 278 "Internal error: webRequest subEvent has orphaned listeners."); |
| 279 } |
| 280 this.subEvents_.splice(idx, 1); |
| 275 } | 281 } |
| 276 | |
| 277 var e = this.subEvents_[idx]; | |
| 278 e.subEvent.removeListener(e.subEventCallback); | |
| 279 if (e.subEvent.hasListeners()) { | |
| 280 console.error( | |
| 281 "Internal error: webRequest subEvent has orphaned listeners."); | |
| 282 } | |
| 283 this.subEvents_.splice(idx, 1); | |
| 284 }; | 282 }; |
| 285 | 283 |
| 286 chrome.WebRequestEvent.prototype.findListener_ = function(cb) { | 284 chrome.WebRequestEvent.prototype.findListener_ = function(cb) { |
| 287 for (var i in this.subEvents_) { | 285 for (var i in this.subEvents_) { |
| 288 var e = this.subEvents_[i]; | 286 var e = this.subEvents_[i]; |
| 289 if (e.callback === cb) { | 287 if (e.callback === cb) { |
| 290 if (e.subEvent.findListener_(e.subEventCallback) > -1) | 288 if (e.subEvent.findListener_(e.subEventCallback) > -1) |
| 291 return i; | 289 return i; |
| 292 console.error("Internal error: webRequest subEvent has no callback."); | 290 console.error("Internal error: webRequest subEvent has no callback."); |
| 293 } | 291 } |
| (...skipping 822 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1116 | 1114 |
| 1117 if (!chrome.tts) | 1115 if (!chrome.tts) |
| 1118 chrome.tts = {}; | 1116 chrome.tts = {}; |
| 1119 | 1117 |
| 1120 if (!chrome.ttsEngine) | 1118 if (!chrome.ttsEngine) |
| 1121 chrome.ttsEngine = {}; | 1119 chrome.ttsEngine = {}; |
| 1122 | 1120 |
| 1123 if (!chrome.experimental.downloads) | 1121 if (!chrome.experimental.downloads) |
| 1124 chrome.experimental.downloads = {}; | 1122 chrome.experimental.downloads = {}; |
| 1125 })(); | 1123 })(); |
| OLD | NEW |