OLD | NEW |
---|---|
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 23 matching lines...) Expand all Loading... | |
34 #include "chrome/renderer/extensions/file_system_natives.h" | 34 #include "chrome/renderer/extensions/file_system_natives.h" |
35 #include "chrome/renderer/extensions/i18n_custom_bindings.h" | 35 #include "chrome/renderer/extensions/i18n_custom_bindings.h" |
36 #include "chrome/renderer/extensions/media_galleries_custom_bindings.h" | 36 #include "chrome/renderer/extensions/media_galleries_custom_bindings.h" |
37 #include "chrome/renderer/extensions/miscellaneous_bindings.h" | 37 #include "chrome/renderer/extensions/miscellaneous_bindings.h" |
38 #include "chrome/renderer/extensions/module_system.h" | 38 #include "chrome/renderer/extensions/module_system.h" |
39 #include "chrome/renderer/extensions/native_handler.h" | 39 #include "chrome/renderer/extensions/native_handler.h" |
40 #include "chrome/renderer/extensions/page_actions_custom_bindings.h" | 40 #include "chrome/renderer/extensions/page_actions_custom_bindings.h" |
41 #include "chrome/renderer/extensions/page_capture_custom_bindings.h" | 41 #include "chrome/renderer/extensions/page_capture_custom_bindings.h" |
42 #include "chrome/renderer/extensions/request_sender.h" | 42 #include "chrome/renderer/extensions/request_sender.h" |
43 #include "chrome/renderer/extensions/runtime_custom_bindings.h" | 43 #include "chrome/renderer/extensions/runtime_custom_bindings.h" |
44 #include "chrome/renderer/extensions/schema_generated_native_handler.h" | |
44 #include "chrome/renderer/extensions/send_request_natives.h" | 45 #include "chrome/renderer/extensions/send_request_natives.h" |
45 #include "chrome/renderer/extensions/set_icon_natives.h" | 46 #include "chrome/renderer/extensions/set_icon_natives.h" |
46 #include "chrome/renderer/extensions/sync_file_system_custom_bindings.h" | 47 #include "chrome/renderer/extensions/sync_file_system_custom_bindings.h" |
47 #include "chrome/renderer/extensions/tab_finder.h" | 48 #include "chrome/renderer/extensions/tab_finder.h" |
48 #include "chrome/renderer/extensions/tabs_custom_bindings.h" | 49 #include "chrome/renderer/extensions/tabs_custom_bindings.h" |
49 #include "chrome/renderer/extensions/tts_custom_bindings.h" | 50 #include "chrome/renderer/extensions/tts_custom_bindings.h" |
50 #include "chrome/renderer/extensions/user_script_slave.h" | 51 #include "chrome/renderer/extensions/user_script_slave.h" |
51 #include "chrome/renderer/extensions/web_request_custom_bindings.h" | 52 #include "chrome/renderer/extensions/web_request_custom_bindings.h" |
52 #include "chrome/renderer/extensions/webstore_bindings.h" | 53 #include "chrome/renderer/extensions/webstore_bindings.h" |
53 #include "chrome/renderer/resource_bundle_source_map.h" | 54 #include "chrome/renderer/resource_bundle_source_map.h" |
(...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
543 } // namespace | 544 } // namespace |
544 | 545 |
545 bool Dispatcher::AllowScriptExtension(WebFrame* frame, | 546 bool Dispatcher::AllowScriptExtension(WebFrame* frame, |
546 const std::string& v8_extension_name, | 547 const std::string& v8_extension_name, |
547 int extension_group, | 548 int extension_group, |
548 int world_id) { | 549 int world_id) { |
549 g_hack_extension_group = extension_group; | 550 g_hack_extension_group = extension_group; |
550 return true; | 551 return true; |
551 } | 552 } |
552 | 553 |
554 void Dispatcher::RegisterSchemaGeneratedBindings( | |
555 ModuleSystem* module_system, | |
556 ChromeV8Context* context, | |
557 v8::Handle<v8::Context> v8_context, | |
558 Feature::Context feature_context) { | |
559 // TODO: Change this to ExtensionAPI::GetAPIsForContext()? | |
560 // const std::set<std::string>& apis = context->GetAvailableExtensionAPIs(); | |
561 scoped_ptr<std::set<std::string> > apis = | |
562 ExtensionAPI::GetSharedInstance()->GetAllAPINames(); | |
563 for (std::set<std::string>::iterator it = apis->begin(); | |
564 it != apis->end(); ++it) { | |
565 const std::string& api_name = *it; | |
566 // If there isn't already a custom binding for this API, we need to make | |
567 // sure one exists to load the schema. Otherwise the custom binding will | |
568 // need to do it itself. Either way, register it on the chrome object to be | |
569 // loaded lazily. | |
570 if (!module_system->HasNativeHandler(api_name)) { | |
571 module_system->RegisterNativeHandler( | |
572 api_name, | |
573 scoped_ptr<NativeHandler>( | |
574 new SchemaGeneratedNativeHandler(v8_schema_registry(), | |
575 api_name, | |
576 "schema"))); | |
577 module_system->SetLazyField(GetOrCreateChrome(v8_context), | |
578 api_name, | |
579 "schema_binding_generator", | |
580 "generate", | |
581 api_name); | |
582 } else { | |
583 // TODO: Make this lazy. | |
not at google - send to devlin
2012/12/13 22:26:40
Yep - the idea is to pull the SetLazyField out of
| |
584 InstallBindings(module_system, v8_context, api_name); | |
585 } | |
586 } | |
587 } | |
588 | |
553 void Dispatcher::RegisterNativeHandlers(ModuleSystem* module_system, | 589 void Dispatcher::RegisterNativeHandlers(ModuleSystem* module_system, |
554 ChromeV8Context* context) { | 590 ChromeV8Context* context) { |
555 module_system->RegisterNativeHandler("event_bindings", | 591 module_system->RegisterNativeHandler("event_bindings", |
556 scoped_ptr<NativeHandler>(EventBindings::Get(this))); | 592 scoped_ptr<NativeHandler>(EventBindings::Get(this))); |
557 module_system->RegisterNativeHandler("miscellaneous_bindings", | 593 module_system->RegisterNativeHandler("miscellaneous_bindings", |
558 scoped_ptr<NativeHandler>(MiscellaneousBindings::Get(this))); | 594 scoped_ptr<NativeHandler>(MiscellaneousBindings::Get(this))); |
559 module_system->RegisterNativeHandler("apiDefinitions", | 595 module_system->RegisterNativeHandler("apiDefinitions", |
560 scoped_ptr<NativeHandler>(new ApiDefinitionsNatives(this))); | 596 scoped_ptr<NativeHandler>(new ApiDefinitionsNatives(this))); |
561 module_system->RegisterNativeHandler("sendRequest", | 597 module_system->RegisterNativeHandler("sendRequest", |
562 scoped_ptr<NativeHandler>( | 598 scoped_ptr<NativeHandler>( |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
668 IDR_SYSTEM_INDICATOR_CUSTOM_BINDINGS_JS); | 704 IDR_SYSTEM_INDICATOR_CUSTOM_BINDINGS_JS); |
669 source_map_.RegisterSource("tabCapture", IDR_TAB_CAPTURE_CUSTOM_BINDINGS_JS); | 705 source_map_.RegisterSource("tabCapture", IDR_TAB_CAPTURE_CUSTOM_BINDINGS_JS); |
670 source_map_.RegisterSource("tabs", IDR_TABS_CUSTOM_BINDINGS_JS); | 706 source_map_.RegisterSource("tabs", IDR_TABS_CUSTOM_BINDINGS_JS); |
671 source_map_.RegisterSource("tts", IDR_TTS_CUSTOM_BINDINGS_JS); | 707 source_map_.RegisterSource("tts", IDR_TTS_CUSTOM_BINDINGS_JS); |
672 source_map_.RegisterSource("ttsEngine", IDR_TTS_ENGINE_CUSTOM_BINDINGS_JS); | 708 source_map_.RegisterSource("ttsEngine", IDR_TTS_ENGINE_CUSTOM_BINDINGS_JS); |
673 source_map_.RegisterSource("types", IDR_TYPES_CUSTOM_BINDINGS_JS); | 709 source_map_.RegisterSource("types", IDR_TYPES_CUSTOM_BINDINGS_JS); |
674 source_map_.RegisterSource("webRequest", IDR_WEB_REQUEST_CUSTOM_BINDINGS_JS); | 710 source_map_.RegisterSource("webRequest", IDR_WEB_REQUEST_CUSTOM_BINDINGS_JS); |
675 source_map_.RegisterSource("webRequestInternal", | 711 source_map_.RegisterSource("webRequestInternal", |
676 IDR_WEB_REQUEST_INTERNAL_CUSTOM_BINDINGS_JS); | 712 IDR_WEB_REQUEST_INTERNAL_CUSTOM_BINDINGS_JS); |
677 source_map_.RegisterSource("webstore", IDR_WEBSTORE_CUSTOM_BINDINGS_JS); | 713 source_map_.RegisterSource("webstore", IDR_WEBSTORE_CUSTOM_BINDINGS_JS); |
714 source_map_.RegisterSource("schema_binding_generator", | |
715 IDR_SCHEMA_BINDING_GENERATOR_JS); | |
678 | 716 |
679 // Platform app sources that are not API-specific.. | 717 // Platform app sources that are not API-specific.. |
680 source_map_.RegisterSource("tagWatcher", IDR_TAG_WATCHER_JS); | 718 source_map_.RegisterSource("tagWatcher", IDR_TAG_WATCHER_JS); |
681 source_map_.RegisterSource("webview", IDR_WEB_VIEW_JS); | 719 source_map_.RegisterSource("webview", IDR_WEB_VIEW_JS); |
682 source_map_.RegisterSource("denyWebview", IDR_WEB_VIEW_DENY_JS); | 720 source_map_.RegisterSource("denyWebview", IDR_WEB_VIEW_DENY_JS); |
683 source_map_.RegisterSource("platformApp", IDR_PLATFORM_APP_JS); | 721 source_map_.RegisterSource("platformApp", IDR_PLATFORM_APP_JS); |
684 source_map_.RegisterSource("injectAppTitlebar", IDR_INJECT_APP_TITLEBAR_JS); | 722 source_map_.RegisterSource("injectAppTitlebar", IDR_INJECT_APP_TITLEBAR_JS); |
685 } | 723 } |
686 | 724 |
687 void Dispatcher::PopulateLazyBindingsMap() { | 725 void Dispatcher::PopulateLazyBindingsMap() { |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
774 GetOrCreateChrome(v8_context); | 812 GetOrCreateChrome(v8_context); |
775 | 813 |
776 // Loading JavaScript is expensive, so only run the full API bindings | 814 // Loading JavaScript is expensive, so only run the full API bindings |
777 // generation mechanisms in extension pages (NOT all web pages). | 815 // generation mechanisms in extension pages (NOT all web pages). |
778 switch (context_type) { | 816 switch (context_type) { |
779 case Feature::UNSPECIFIED_CONTEXT: | 817 case Feature::UNSPECIFIED_CONTEXT: |
780 case Feature::WEB_PAGE_CONTEXT: | 818 case Feature::WEB_PAGE_CONTEXT: |
781 // TODO(kalman): see comment below about ExtensionAPI. | 819 // TODO(kalman): see comment below about ExtensionAPI. |
782 InstallBindings(module_system.get(), v8_context, "app"); | 820 InstallBindings(module_system.get(), v8_context, "app"); |
783 InstallBindings(module_system.get(), v8_context, "webstore"); | 821 InstallBindings(module_system.get(), v8_context, "webstore"); |
822 | |
823 // TODO: Move this back down to next case. | |
not at google - send to devlin
2012/12/13 22:26:40
Why is it up here?
cduvall
2012/12/14 00:25:18
Just so I could make sure everything was working.
| |
824 RegisterSchemaGeneratedBindings(module_system.get(), | |
825 context, | |
826 v8_context, | |
827 context_type); | |
784 break; | 828 break; |
785 | |
786 case Feature::BLESSED_EXTENSION_CONTEXT: | 829 case Feature::BLESSED_EXTENSION_CONTEXT: |
787 case Feature::UNBLESSED_EXTENSION_CONTEXT: | 830 case Feature::UNBLESSED_EXTENSION_CONTEXT: |
788 case Feature::CONTENT_SCRIPT_CONTEXT: { | 831 case Feature::CONTENT_SCRIPT_CONTEXT: { |
789 CHECK(extension); | 832 CHECK(extension); |
790 if (!extension->is_platform_app()) | 833 if (!extension->is_platform_app()) |
791 module_system->Require("miscellaneous_bindings"); | 834 module_system->Require("miscellaneous_bindings"); |
792 module_system->Require("schema_generated_bindings"); | 835 // module_system->Require("schema_generated_bindings"); |
793 module_system->Require("apitest"); | 836 module_system->Require("apitest"); |
794 | 837 |
795 // TODO(kalman): move this code back out of the switch and execute it | 838 // TODO(kalman): move this code back out of the switch and execute it |
796 // regardless of |context_type|. ExtensionAPI knows how to return the | 839 // regardless of |context_type|. ExtensionAPI knows how to return the |
797 // correct APIs, however, until it doesn't have a 2MB overhead we can't | 840 // correct APIs, however, until it doesn't have a 2MB overhead we can't |
798 // load it in every process. | 841 // load it in every process. |
799 const std::set<std::string>& apis = context->GetAvailableExtensionAPIs(); | |
800 for (std::set<std::string>::const_iterator i = apis.begin(); | |
801 i != apis.end(); ++i) { | |
802 InstallBindings(module_system.get(), v8_context, *i); | |
803 } | |
804 | |
805 break; | 842 break; |
806 } | 843 } |
807 } | 844 } |
808 | 845 |
809 // Inject custom JS into the platform app context. | 846 // Inject custom JS into the platform app context. |
810 if (IsWithinPlatformApp(frame)) | 847 if (IsWithinPlatformApp(frame)) |
811 module_system->Require("platformApp"); | 848 module_system->Require("platformApp"); |
812 | 849 |
813 if (context_type == Feature::BLESSED_EXTENSION_CONTEXT) { | 850 if (context_type == Feature::BLESSED_EXTENSION_CONTEXT) { |
814 bool has_permission = extension->HasAPIPermission(APIPermission::kWebView); | 851 bool has_permission = extension->HasAPIPermission(APIPermission::kWebView); |
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1132 std::string error_msg = base::StringPrintf(kMessage, function_name.c_str()); | 1169 std::string error_msg = base::StringPrintf(kMessage, function_name.c_str()); |
1133 v8::ThrowException( | 1170 v8::ThrowException( |
1134 v8::Exception::Error(v8::String::New(error_msg.c_str()))); | 1171 v8::Exception::Error(v8::String::New(error_msg.c_str()))); |
1135 return false; | 1172 return false; |
1136 } | 1173 } |
1137 | 1174 |
1138 return true; | 1175 return true; |
1139 } | 1176 } |
1140 | 1177 |
1141 } // namespace extensions | 1178 } // namespace extensions |
OLD | NEW |