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

Side by Side Diff: chrome/renderer/extensions/miscellaneous_bindings.cc

Issue 12853007: Don't throw exceptions when v8 objects/contexts are missing, and catch (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include "chrome/renderer/extensions/miscellaneous_bindings.h" 5 #include "chrome/renderer/extensions/miscellaneous_bindings.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 extensions::ScopedPersistent<v8::Function> callback; 157 extensions::ScopedPersistent<v8::Function> callback;
158 158
159 private: 159 private:
160 DISALLOW_COPY_AND_ASSIGN(GCCallbackArgs); 160 DISALLOW_COPY_AND_ASSIGN(GCCallbackArgs);
161 }; 161 };
162 162
163 static void GCCallback(v8::Isolate* isolate, 163 static void GCCallback(v8::Isolate* isolate,
164 v8::Persistent<v8::Value> object, 164 v8::Persistent<v8::Value> object,
165 void* parameter) { 165 void* parameter) {
166 v8::HandleScope handle_scope; 166 v8::HandleScope handle_scope;
167 GCCallbackArgs* args = reinterpret_cast<GCCallbackArgs*>(parameter); 167 GCCallbackArgs* args = static_cast<GCCallbackArgs*>(parameter);
168 WebKit::WebScopedMicrotaskSuppression suppression; 168 WebKit::WebScopedMicrotaskSuppression suppression;
169 args->callback->Call(args->callback->CreationContext()->Global(), 0, NULL); 169 // Wrap in try/catch here so that we don't call into any message/exception
170 // handlers during GC. That is a recipe for pain.
171 v8::TryCatch trycatch;
172 args->callback->Call(v8::Object::New(), 0, NULL);
170 delete args; 173 delete args;
171 } 174 }
172 175
173 // Binds a callback to be invoked when the given object is garbage collected. 176 // Binds a callback to be invoked when the given object is garbage collected.
174 v8::Handle<v8::Value> BindToGC(const v8::Arguments& args) { 177 v8::Handle<v8::Value> BindToGC(const v8::Arguments& args) {
175 if (args.Length() == 2 && args[0]->IsObject() && args[1]->IsFunction()) { 178 CHECK(args.Length() == 2 && args[0]->IsObject() && args[1]->IsFunction());
176 GCCallbackArgs* context = new GCCallbackArgs( 179 GCCallbackArgs* context = new GCCallbackArgs(
177 v8::Handle<v8::Object>::Cast(args[0]), 180 v8::Handle<v8::Object>::Cast(args[0]),
178 v8::Handle<v8::Function>::Cast(args[1])); 181 v8::Handle<v8::Function>::Cast(args[1]));
179 context->object.MakeWeak(context, GCCallback); 182 context->object.MakeWeak(context, GCCallback);
180 } else {
181 NOTREACHED();
182 }
183 return v8::Undefined(); 183 return v8::Undefined();
184 } 184 }
185 }; 185 };
186 186
187 } // namespace 187 } // namespace
188 188
189 namespace extensions { 189 namespace extensions {
190 190
191 ChromeV8Extension* MiscellaneousBindings::Get( 191 ChromeV8Extension* MiscellaneousBindings::Get(
192 Dispatcher* dispatcher, 192 Dispatcher* dispatcher,
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 } else { 322 } else {
323 arguments.push_back(v8::Null()); 323 arguments.push_back(v8::Null());
324 } 324 }
325 (*it)->CallChromeHiddenMethod("Port.dispatchOnDisconnect", 325 (*it)->CallChromeHiddenMethod("Port.dispatchOnDisconnect",
326 arguments.size(), &arguments[0], 326 arguments.size(), &arguments[0],
327 NULL); 327 NULL);
328 } 328 }
329 } 329 }
330 330
331 } // namespace extensions 331 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698