Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Unified Diff: chrome/renderer/extensions/miscellaneous_bindings.cc

Issue 12737007: Merge 188631 "Don't throw exceptions when v8 objects/contexts ar..." (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1443/src/
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/renderer/extensions/extension_helper.cc ('k') | chrome/renderer/extensions/module_system.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/extensions/miscellaneous_bindings.cc
===================================================================
--- chrome/renderer/extensions/miscellaneous_bindings.cc (revision 188637)
+++ chrome/renderer/extensions/miscellaneous_bindings.cc (working copy)
@@ -164,22 +164,24 @@
v8::Persistent<v8::Value> object,
void* parameter) {
v8::HandleScope handle_scope;
- GCCallbackArgs* args = reinterpret_cast<GCCallbackArgs*>(parameter);
+ GCCallbackArgs* args = static_cast<GCCallbackArgs*>(parameter);
+ v8::Handle<v8::Context> context = args->callback->CreationContext();
+ v8::Context::Scope context_scope(context);
WebKit::WebScopedMicrotaskSuppression suppression;
- args->callback->Call(args->callback->CreationContext()->Global(), 0, NULL);
+ // Wrap in try/catch here so that we don't call into any message/exception
+ // handlers during GC. That is a recipe for pain.
+ v8::TryCatch trycatch;
+ args->callback->Call(context->Global(), 0, NULL);
delete args;
}
// Binds a callback to be invoked when the given object is garbage collected.
v8::Handle<v8::Value> BindToGC(const v8::Arguments& args) {
- if (args.Length() == 2 && args[0]->IsObject() && args[1]->IsFunction()) {
- GCCallbackArgs* context = new GCCallbackArgs(
- v8::Handle<v8::Object>::Cast(args[0]),
- v8::Handle<v8::Function>::Cast(args[1]));
- context->object.MakeWeak(context, GCCallback);
- } else {
- NOTREACHED();
- }
+ CHECK(args.Length() == 2 && args[0]->IsObject() && args[1]->IsFunction());
+ GCCallbackArgs* context = new GCCallbackArgs(
+ v8::Handle<v8::Object>::Cast(args[0]),
+ v8::Handle<v8::Function>::Cast(args[1]));
+ context->object.MakeWeak(context, GCCallback);
return v8::Undefined();
}
};
« no previous file with comments | « chrome/renderer/extensions/extension_helper.cc ('k') | chrome/renderer/extensions/module_system.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698