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

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

Issue 173034: Validation of extension api callback and event parameters in DEBUG (Closed)
Patch Set: build docs Created 11 years, 4 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/bindings_utils.h ('k') | chrome/renderer/extensions/event_bindings.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/extensions/bindings_utils.cc
diff --git a/chrome/renderer/extensions/bindings_utils.cc b/chrome/renderer/extensions/bindings_utils.cc
index 13deb2a698c026477c697237ef4a405a60ea0dbf..d96f8d771b5b9aee01480f8bc25b9cf76775f766 100644
--- a/chrome/renderer/extensions/bindings_utils.cc
+++ b/chrome/renderer/extensions/bindings_utils.cc
@@ -13,6 +13,7 @@ using WebKit::WebFrame;
namespace bindings_utils {
const char* kChromeHidden = "chromeHidden";
+const char* kValidateCallbacks = "validateCallbacks";
struct SingletonData {
ContextList contexts;
@@ -40,6 +41,13 @@ v8::Handle<v8::Value> ExtensionBase::GetChromeHidden(
if (hidden.IsEmpty() || hidden->IsUndefined()) {
hidden = v8::Object::New();
global->SetHiddenValue(v8::String::New(kChromeHidden), hidden);
+
+#ifdef _DEBUG
+ // Tell extension_process_bindings.js to validate callbacks and events
+ // against their schema definitions in api/extension_api.json.
+ v8::Local<v8::Object>::Cast(hidden)
+ ->Set(v8::String::New(kValidateCallbacks), v8::True());
+#endif
}
DCHECK(hidden->IsObject());
@@ -94,9 +102,9 @@ RenderView* GetRenderViewForCurrentContext() {
return renderview;
}
-void CallFunctionInContext(v8::Handle<v8::Context> context,
- const std::string& function_name, int argc,
- v8::Handle<v8::Value>* argv) {
+v8::Handle<v8::Value> CallFunctionInContext(v8::Handle<v8::Context> context,
+ const std::string& function_name, int argc,
+ v8::Handle<v8::Value>* argv) {
v8::Context::Scope context_scope(context);
// Look up the function name, which may be a sub-property like
@@ -111,12 +119,14 @@ void CallFunctionInContext(v8::Handle<v8::Context> context,
}
if (value.IsEmpty() || !value->IsFunction()) {
NOTREACHED();
- return;
+ return v8::Undefined();
}
v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(value);
if (!function.IsEmpty())
- function->Call(v8::Object::New(), argc, argv);
+ return function->Call(v8::Object::New(), argc, argv);
+
+ return v8::Undefined();
}
} // namespace bindings_utils
« no previous file with comments | « chrome/renderer/extensions/bindings_utils.h ('k') | chrome/renderer/extensions/event_bindings.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698