diff options
-rw-r--r-- | chrome/browser/views/browser_actions_container.cc | 4 | ||||
-rw-r--r-- | chrome/renderer/resources/extension_process_bindings.js | 14 |
2 files changed, 18 insertions, 0 deletions
diff --git a/chrome/browser/views/browser_actions_container.cc b/chrome/browser/views/browser_actions_container.cc index 6cc71e4..b52db8c 100644 --- a/chrome/browser/views/browser_actions_container.cc +++ b/chrome/browser/views/browser_actions_container.cc @@ -302,6 +302,10 @@ void BrowserActionsContainer::RemoveBrowserAction(Extension* extension) { if (!extension->browser_action()) return; + if (popup_ && popup_->host()->extension() == extension) { + HidePopup(); + } + for (std::vector<BrowserActionView*>::iterator iter = browser_action_views_.begin(); iter != browser_action_views_.end(); ++iter) { diff --git a/chrome/renderer/resources/extension_process_bindings.js b/chrome/renderer/resources/extension_process_bindings.js index 7d8cac8..1ccbd85 100644 --- a/chrome/renderer/resources/extension_process_bindings.js +++ b/chrome/renderer/resources/extension_process_bindings.js @@ -166,7 +166,21 @@ var chrome = chrome || {}; // JSON.stringify doesn't support a root object which is undefined. if (request.args === undefined) request.args = null; + + // Some javascript libraries (e.g. prototype.js version <= 1.6) add a toJSON + // serializer function on Array.prototype that is incompatible with our + // native JSON library, causing incorrect deserialization in the C++ side of + // StartRequest. We work around that here by temporarily removing the toJSON + // function. + var arrayToJsonTmp; + if (Array.prototype.toJSON) { + arrayToJsonTmp = Array.prototype.toJSON; + Array.prototype.toJSON = null; + } var sargs = JSON.stringify(request.args); + if (arrayToJsonTmp) { + Array.prototype.toJSON = arrayToJsonTmp; + } var requestId = GetNextRequestId(); requests[requestId] = request; return StartRequest(functionName, sargs, requestId, |