summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/views/browser_actions_container.cc4
-rw-r--r--chrome/renderer/resources/extension_process_bindings.js14
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,