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

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

Issue 12647017: Lazily require types when validating Extensions API calls (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixes 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/dispatcher.h" 5 #include "chrome/renderer/extensions/dispatcher.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/string_piece.h" 10 #include "base/string_piece.h"
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 int manifest_version_; 320 int manifest_version_;
321 bool send_request_disabled_; 321 bool send_request_disabled_;
322 }; 322 };
323 323
324 class LoggingNativeHandler : public ObjectBackedNativeHandler { 324 class LoggingNativeHandler : public ObjectBackedNativeHandler {
325 public: 325 public:
326 explicit LoggingNativeHandler(v8::Handle<v8::Context> context) 326 explicit LoggingNativeHandler(v8::Handle<v8::Context> context)
327 : ObjectBackedNativeHandler(context) { 327 : ObjectBackedNativeHandler(context) {
328 RouteFunction("DCHECK", 328 RouteFunction("DCHECK",
329 base::Bind(&LoggingNativeHandler::Dcheck, base::Unretained(this))); 329 base::Bind(&LoggingNativeHandler::Dcheck, base::Unretained(this)));
330 RouteFunction("CHECK",
331 base::Bind(&LoggingNativeHandler::Check, base::Unretained(this)));
332 }
333
334 v8::Handle<v8::Value> Check(const v8::Arguments& args) {
335 bool check_value;
336 std::string error_message;
337 ParseArgs(args, &check_value, &error_message);
338 CHECK(check_value) << error_message;
339 return v8::Undefined();
330 } 340 }
331 341
332 v8::Handle<v8::Value> Dcheck(const v8::Arguments& args) { 342 v8::Handle<v8::Value> Dcheck(const v8::Arguments& args) {
343 bool check_value;
344 std::string error_message;
345 ParseArgs(args, &check_value, &error_message);
346 DCHECK(check_value) << error_message;
347 return v8::Undefined();
348 }
349
350 private:
351 void ParseArgs(const v8::Arguments& args,
352 bool* check_value,
353 std::string* error_message) {
333 CHECK_LE(args.Length(), 2); 354 CHECK_LE(args.Length(), 2);
334 bool check_value = args[0]->BooleanValue(); 355 *check_value = args[0]->BooleanValue();
335 std::string error_message;
336 if (args.Length() == 2) 356 if (args.Length() == 2)
337 error_message = "Error: " + std::string(*v8::String::AsciiValue(args[1])); 357 *error_message = "Error: " + std::string(
358 *v8::String::AsciiValue(args[1]));
338 359
339 v8::Handle<v8::StackTrace> stack_trace = 360 v8::Handle<v8::StackTrace> stack_trace =
340 v8::StackTrace::CurrentStackTrace(10); 361 v8::StackTrace::CurrentStackTrace(10);
341 if (stack_trace.IsEmpty() || stack_trace->GetFrameCount() <= 0) { 362 if (stack_trace.IsEmpty() || stack_trace->GetFrameCount() <= 0) {
342 error_message += "\n <no stack trace>"; 363 *error_message += "\n <no stack trace>";
343 } else { 364 } else {
344 for (size_t i = 0; i < (size_t) stack_trace->GetFrameCount(); ++i) { 365 for (size_t i = 0; i < (size_t) stack_trace->GetFrameCount(); ++i) {
345 v8::Handle<v8::StackFrame> frame = stack_trace->GetFrame(i); 366 v8::Handle<v8::StackFrame> frame = stack_trace->GetFrame(i);
346 CHECK(!frame.IsEmpty()); 367 CHECK(!frame.IsEmpty());
347 error_message += base::StringPrintf("\n at %s (%s:%d:%d)", 368 *error_message += base::StringPrintf("\n at %s (%s:%d:%d)",
348 ToStringOrDefault(frame->GetFunctionName(), "<anonymous>").c_str(), 369 ToStringOrDefault(frame->GetFunctionName(), "<anonymous>").c_str(),
349 ToStringOrDefault(frame->GetScriptName(), "<anonymous>").c_str(), 370 ToStringOrDefault(frame->GetScriptName(), "<anonymous>").c_str(),
350 frame->GetLineNumber(), 371 frame->GetLineNumber(),
351 frame->GetColumn()); 372 frame->GetColumn());
352 } 373 }
353 } 374 }
354 DCHECK(check_value) << error_message;
355 return v8::Undefined();
356 } 375 }
357 376
358 private:
359 std::string ToStringOrDefault(const v8::Handle<v8::String>& v8_string, 377 std::string ToStringOrDefault(const v8::Handle<v8::String>& v8_string,
360 const std::string& dflt) { 378 const std::string& dflt) {
361 if (v8_string.IsEmpty()) 379 if (v8_string.IsEmpty())
362 return dflt; 380 return dflt;
363 std::string ascii_value = *v8::String::AsciiValue(v8_string); 381 std::string ascii_value = *v8::String::AsciiValue(v8_string);
364 return ascii_value.empty() ? dflt : ascii_value; 382 return ascii_value.empty() ? dflt : ascii_value;
365 } 383 }
366 }; 384 };
367 385
368 void InstallAppBindings(ModuleSystem* module_system, 386 void InstallAppBindings(ModuleSystem* module_system,
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after
782 source_map_.RegisterSource("utils", IDR_UTILS_JS); 800 source_map_.RegisterSource("utils", IDR_UTILS_JS);
783 source_map_.RegisterSource("entryIdManager", IDR_ENTRY_ID_MANAGER); 801 source_map_.RegisterSource("entryIdManager", IDR_ENTRY_ID_MANAGER);
784 802
785 // Custom bindings. 803 // Custom bindings.
786 source_map_.RegisterSource("app", IDR_APP_CUSTOM_BINDINGS_JS); 804 source_map_.RegisterSource("app", IDR_APP_CUSTOM_BINDINGS_JS);
787 source_map_.RegisterSource("app.runtime", IDR_APP_RUNTIME_CUSTOM_BINDINGS_JS); 805 source_map_.RegisterSource("app.runtime", IDR_APP_RUNTIME_CUSTOM_BINDINGS_JS);
788 source_map_.RegisterSource("app.window", IDR_APP_WINDOW_CUSTOM_BINDINGS_JS); 806 source_map_.RegisterSource("app.window", IDR_APP_WINDOW_CUSTOM_BINDINGS_JS);
789 source_map_.RegisterSource("bluetooth", IDR_BLUETOOTH_CUSTOM_BINDINGS_JS); 807 source_map_.RegisterSource("bluetooth", IDR_BLUETOOTH_CUSTOM_BINDINGS_JS);
790 source_map_.RegisterSource("browserAction", 808 source_map_.RegisterSource("browserAction",
791 IDR_BROWSER_ACTION_CUSTOM_BINDINGS_JS); 809 IDR_BROWSER_ACTION_CUSTOM_BINDINGS_JS);
792 source_map_.RegisterSource("contentSettings",
793 IDR_CONTENT_SETTINGS_CUSTOM_BINDINGS_JS);
794 source_map_.RegisterSource("contextMenus", 810 source_map_.RegisterSource("contextMenus",
795 IDR_CONTEXT_MENUS_CUSTOM_BINDINGS_JS); 811 IDR_CONTEXT_MENUS_CUSTOM_BINDINGS_JS);
796 source_map_.RegisterSource("declarativeContent", 812 source_map_.RegisterSource("declarativeContent",
797 IDR_DECLARATIVE_CONTENT_CUSTOM_BINDINGS_JS); 813 IDR_DECLARATIVE_CONTENT_CUSTOM_BINDINGS_JS);
798 source_map_.RegisterSource("declarativeWebRequest", 814 source_map_.RegisterSource("declarativeWebRequest",
799 IDR_DECLARATIVE_WEBREQUEST_CUSTOM_BINDINGS_JS); 815 IDR_DECLARATIVE_WEBREQUEST_CUSTOM_BINDINGS_JS);
800 source_map_.RegisterSource("downloads", 816 source_map_.RegisterSource("downloads",
801 IDR_DOWNLOADS_CUSTOM_BINDINGS_JS); 817 IDR_DOWNLOADS_CUSTOM_BINDINGS_JS);
802 source_map_.RegisterSource( 818 source_map_.RegisterSource(
803 "experimental.mediaGalleries", 819 "experimental.mediaGalleries",
(...skipping 14 matching lines...) Expand all
818 source_map_.RegisterSource("notifications", 834 source_map_.RegisterSource("notifications",
819 IDR_NOTIFICATIONS_CUSTOM_BINDINGS_JS); 835 IDR_NOTIFICATIONS_CUSTOM_BINDINGS_JS);
820 source_map_.RegisterSource("omnibox", IDR_OMNIBOX_CUSTOM_BINDINGS_JS); 836 source_map_.RegisterSource("omnibox", IDR_OMNIBOX_CUSTOM_BINDINGS_JS);
821 source_map_.RegisterSource("pageActions", 837 source_map_.RegisterSource("pageActions",
822 IDR_PAGE_ACTIONS_CUSTOM_BINDINGS_JS); 838 IDR_PAGE_ACTIONS_CUSTOM_BINDINGS_JS);
823 source_map_.RegisterSource("pageAction", IDR_PAGE_ACTION_CUSTOM_BINDINGS_JS); 839 source_map_.RegisterSource("pageAction", IDR_PAGE_ACTION_CUSTOM_BINDINGS_JS);
824 source_map_.RegisterSource("pageCapture", 840 source_map_.RegisterSource("pageCapture",
825 IDR_PAGE_CAPTURE_CUSTOM_BINDINGS_JS); 841 IDR_PAGE_CAPTURE_CUSTOM_BINDINGS_JS);
826 source_map_.RegisterSource("permissions", IDR_PERMISSIONS_CUSTOM_BINDINGS_JS); 842 source_map_.RegisterSource("permissions", IDR_PERMISSIONS_CUSTOM_BINDINGS_JS);
827 source_map_.RegisterSource("runtime", IDR_RUNTIME_CUSTOM_BINDINGS_JS); 843 source_map_.RegisterSource("runtime", IDR_RUNTIME_CUSTOM_BINDINGS_JS);
828 source_map_.RegisterSource("storage", IDR_STORAGE_CUSTOM_BINDINGS_JS);
829 source_map_.RegisterSource("syncFileSystem", 844 source_map_.RegisterSource("syncFileSystem",
830 IDR_SYNC_FILE_SYSTEM_CUSTOM_BINDINGS_JS); 845 IDR_SYNC_FILE_SYSTEM_CUSTOM_BINDINGS_JS);
831 source_map_.RegisterSource("systemIndicator", 846 source_map_.RegisterSource("systemIndicator",
832 IDR_SYSTEM_INDICATOR_CUSTOM_BINDINGS_JS); 847 IDR_SYSTEM_INDICATOR_CUSTOM_BINDINGS_JS);
833 source_map_.RegisterSource("tabCapture", IDR_TAB_CAPTURE_CUSTOM_BINDINGS_JS); 848 source_map_.RegisterSource("tabCapture", IDR_TAB_CAPTURE_CUSTOM_BINDINGS_JS);
834 source_map_.RegisterSource("tabs", IDR_TABS_CUSTOM_BINDINGS_JS); 849 source_map_.RegisterSource("tabs", IDR_TABS_CUSTOM_BINDINGS_JS);
835 source_map_.RegisterSource("tts", IDR_TTS_CUSTOM_BINDINGS_JS); 850 source_map_.RegisterSource("tts", IDR_TTS_CUSTOM_BINDINGS_JS);
836 source_map_.RegisterSource("ttsEngine", IDR_TTS_ENGINE_CUSTOM_BINDINGS_JS); 851 source_map_.RegisterSource("ttsEngine", IDR_TTS_ENGINE_CUSTOM_BINDINGS_JS);
837 source_map_.RegisterSource("types", IDR_TYPES_CUSTOM_BINDINGS_JS);
838 source_map_.RegisterSource("webRequest", IDR_WEB_REQUEST_CUSTOM_BINDINGS_JS); 852 source_map_.RegisterSource("webRequest", IDR_WEB_REQUEST_CUSTOM_BINDINGS_JS);
839 source_map_.RegisterSource("webRequestInternal", 853 source_map_.RegisterSource("webRequestInternal",
840 IDR_WEB_REQUEST_INTERNAL_CUSTOM_BINDINGS_JS); 854 IDR_WEB_REQUEST_INTERNAL_CUSTOM_BINDINGS_JS);
841 source_map_.RegisterSource("webstore", IDR_WEBSTORE_CUSTOM_BINDINGS_JS); 855 source_map_.RegisterSource("webstore", IDR_WEBSTORE_CUSTOM_BINDINGS_JS);
842 source_map_.RegisterSource("binding", IDR_BINDING_JS); 856 source_map_.RegisterSource("binding", IDR_BINDING_JS);
843 857
858 // Custom types sources.
859 source_map_.RegisterSource("ChromeSetting", IDR_CHROME_SETTING_JS);
860 source_map_.RegisterSource("StorageArea", IDR_STORAGE_AREA_JS);
861 source_map_.RegisterSource("ContentSetting", IDR_CONTENT_SETTING_JS);
862
844 // Platform app sources that are not API-specific.. 863 // Platform app sources that are not API-specific..
845 source_map_.RegisterSource("tagWatcher", IDR_TAG_WATCHER_JS); 864 source_map_.RegisterSource("tagWatcher", IDR_TAG_WATCHER_JS);
846 // Note: webView not webview so that this doesn't interfere with the 865 // Note: webView not webview so that this doesn't interfere with the
847 // chrome.webview API bindings. 866 // chrome.webview API bindings.
848 source_map_.RegisterSource("webView", IDR_WEB_VIEW_JS); 867 source_map_.RegisterSource("webView", IDR_WEB_VIEW_JS);
849 source_map_.RegisterSource("webViewExperimental", 868 source_map_.RegisterSource("webViewExperimental",
850 IDR_WEB_VIEW_EXPERIMENTAL_JS); 869 IDR_WEB_VIEW_EXPERIMENTAL_JS);
851 source_map_.RegisterSource("denyWebView", IDR_WEB_VIEW_DENY_JS); 870 source_map_.RegisterSource("denyWebView", IDR_WEB_VIEW_DENY_JS);
852 source_map_.RegisterSource("platformApp", IDR_PLATFORM_APP_JS); 871 source_map_.RegisterSource("platformApp", IDR_PLATFORM_APP_JS);
853 source_map_.RegisterSource("injectAppTitlebar", IDR_INJECT_APP_TITLEBAR_JS); 872 source_map_.RegisterSource("injectAppTitlebar", IDR_INJECT_APP_TITLEBAR_JS);
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after
1326 std::string error_msg = base::StringPrintf(kMessage, function_name.c_str()); 1345 std::string error_msg = base::StringPrintf(kMessage, function_name.c_str());
1327 v8::ThrowException( 1346 v8::ThrowException(
1328 v8::Exception::Error(v8::String::New(error_msg.c_str()))); 1347 v8::Exception::Error(v8::String::New(error_msg.c_str())));
1329 return false; 1348 return false;
1330 } 1349 }
1331 1350
1332 return true; 1351 return true;
1333 } 1352 }
1334 1353
1335 } // namespace extensions 1354 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698