| Index: chrome/renderer/resources/extension_process_bindings.js
 | 
| ===================================================================
 | 
| --- chrome/renderer/resources/extension_process_bindings.js	(revision 13446)
 | 
| +++ chrome/renderer/resources/extension_process_bindings.js	(working copy)
 | 
| @@ -6,8 +6,15 @@
 | 
|    // callback handling
 | 
|    var callbacks = [];
 | 
|    chromium._dispatchCallback = function(callbackId, str) {
 | 
| -    callbacks[callbackId](goog.json.parse(str));
 | 
| -    delete callbacks[callbackId];
 | 
| +    try {
 | 
| +      if (str) {
 | 
| +        callbacks[callbackId](goog.json.parse(str));
 | 
| +      } else {
 | 
| +        callbacks[callbackId]();
 | 
| +      }
 | 
| +    } finally {
 | 
| +      delete callbacks[callbackId];
 | 
| +    }
 | 
|    };
 | 
|  
 | 
|    // Send an API request and optionally register a callback.
 | 
| @@ -29,8 +36,20 @@
 | 
|      native function GetTabsForWindow();
 | 
|      sendRequest(GetTabsForWindow, null, callback);
 | 
|    };
 | 
| +  chromium.tabs.getTab = function(tabId, callback) {
 | 
| +    native function GetTab();
 | 
| +    sendRequest(GetTab, tabId, callback);
 | 
| +  };
 | 
|    chromium.tabs.createTab = function(tab, callback) {
 | 
|      native function CreateTab();
 | 
|      sendRequest(CreateTab, tab, callback);
 | 
|    };
 | 
| +  chromium.tabs.updateTab = function(tab) {
 | 
| +    native function UpdateTab();
 | 
| +    sendRequest(UpdateTab, tab);
 | 
| +  };
 | 
| +  chromium.tabs.removeTab = function(tabId) {
 | 
| +    native function RemoveTab();
 | 
| +    sendRequest(RemoveTab, tabId);
 | 
| +  };
 | 
|  })();
 | 
| 
 |