diff options
author | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-16 23:56:06 +0000 |
---|---|---|
committer | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-16 23:56:06 +0000 |
commit | 15397b4b6bc600a8f4bf36a794d07dd057072e17 (patch) | |
tree | cdeebdde2f0f6e140595aea8e342f09b26bf8e43 /chrome/renderer | |
parent | e769f770492fce71f9211ae19745687acd0bf871 (diff) | |
download | chromium_src-15397b4b6bc600a8f4bf36a794d07dd057072e17.zip chromium_src-15397b4b6bc600a8f4bf36a794d07dd057072e17.tar.gz chromium_src-15397b4b6bc600a8f4bf36a794d07dd057072e17.tar.bz2 |
Hack to restrict runtime API to dev channel rather than experimental.
BUG=124167
TEST=no
Review URL: https://chromiumcodereview.appspot.com/10310182
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@137566 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/extensions/extension_dispatcher.cc | 34 | ||||
-rw-r--r-- | chrome/renderer/extensions/extension_dispatcher.h | 5 | ||||
-rw-r--r-- | chrome/renderer/renderer_resources.grd | 2 | ||||
-rw-r--r-- | chrome/renderer/resources/extensions/runtime_custom_bindings.js (renamed from chrome/renderer/resources/extensions/experimental.runtime_custom_bindings.js) | 2 | ||||
-rw-r--r-- | chrome/renderer/resources/extensions/schema_generated_bindings.js | 13 |
5 files changed, 47 insertions, 9 deletions
diff --git a/chrome/renderer/extensions/extension_dispatcher.cc b/chrome/renderer/extensions/extension_dispatcher.cc index 32c0b1d..9706f67 100644 --- a/chrome/renderer/extensions/extension_dispatcher.cc +++ b/chrome/renderer/extensions/extension_dispatcher.cc @@ -10,6 +10,7 @@ #include "base/string_piece.h" #include "chrome/common/child_process_logging.h" #include "chrome/common/chrome_switches.h" +#include "chrome/common/chrome_version_info.h" #include "chrome/common/chrome_view_type.h" #include "chrome/common/extensions/api/extension_api.h" #include "chrome/common/extensions/extension.h" @@ -92,8 +93,7 @@ namespace { static const int64 kInitialExtensionIdleHandlerDelayMs = 5*1000; static const int64 kMaxExtensionIdleHandlerDelayMs = 5*60*1000; static const char kEventDispatchFunction[] = "Event.dispatchJSON"; -static const char kOnUnloadEvent[] = - "experimental.runtime.onBackgroundPageUnloadingSoon"; +static const char kOnUnloadEvent[] = "runtime.onBackgroundPageUnloadingSoon"; class ChromeHiddenNativeHandler : public NativeHandler { public: @@ -179,6 +179,22 @@ class LazyBackgroundPageNativeHandler : public ChromeV8Extension { } }; +class ChannelNativeHandler : public NativeHandler { + public: + explicit ChannelNativeHandler(chrome::VersionInfo::Channel channel) + : channel_(channel) { + RouteFunction("IsDevChannel", + base::Bind(&ChannelNativeHandler::IsDevChannel, + base::Unretained(this))); + } + + v8::Handle<v8::Value> IsDevChannel(const v8::Arguments& args) { + return v8::Boolean::New(channel_ <= chrome::VersionInfo::CHANNEL_DEV); + } + + chrome::VersionInfo::Channel channel_; +}; + void InstallAppBindings(ModuleSystem* module_system, v8::Handle<v8::Object> chrome, v8::Handle<v8::Object> chrome_hidden) { @@ -204,7 +220,8 @@ ExtensionDispatcher::ExtensionDispatcher() webrequest_adblock_(false), webrequest_adblock_plus_(false), webrequest_other_(false), - source_map_(&ResourceBundle::GetSharedInstance()) { + source_map_(&ResourceBundle::GetSharedInstance()), + chrome_channel_(chrome::VersionInfo::CHANNEL_UNKNOWN) { const CommandLine& command_line = *(CommandLine::ForCurrentProcess()); is_extension_process_ = command_line.HasSwitch(switches::kExtensionProcess) || @@ -228,6 +245,7 @@ bool ExtensionDispatcher::OnControlMessageReceived( const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(ExtensionDispatcher, message) + IPC_MESSAGE_HANDLER(ExtensionMsg_SetChannel, OnSetChannel) IPC_MESSAGE_HANDLER(ExtensionMsg_MessageInvoke, OnMessageInvoke) IPC_MESSAGE_HANDLER(ExtensionMsg_DispatchOnConnect, OnDispatchOnConnect) IPC_MESSAGE_HANDLER(ExtensionMsg_DeliverMessage, OnDeliverMessage) @@ -292,6 +310,10 @@ void ExtensionDispatcher::OnSetFunctionNames( function_names_.insert(names[i]); } +void ExtensionDispatcher::OnSetChannel(int channel) { + chrome_channel_ = channel; +} + void ExtensionDispatcher::OnMessageInvoke(const std::string& extension_id, const std::string& function_name, const ListValue& args, @@ -525,8 +547,6 @@ void ExtensionDispatcher::PopulateSourceMap() { IDR_MEDIA_GALLERY_CUSTOM_BINDINGS_JS); source_map_.RegisterSource("experimental.offscreen", IDR_EXPERIMENTAL_OFFSCREENTABS_CUSTOM_BINDINGS_JS); - source_map_.RegisterSource("experimental.runtime", - IDR_EXPERIMENTAL_RUNTIME_CUSTOM_BINDINGS_JS); source_map_.RegisterSource("experimental.usb", IDR_EXPERIMENTAL_USB_CUSTOM_BINDINGS_JS); source_map_.RegisterSource("extension", IDR_EXTENSION_CUSTOM_BINDINGS_JS); @@ -544,6 +564,7 @@ void ExtensionDispatcher::PopulateSourceMap() { source_map_.RegisterSource("pageCapture", IDR_PAGE_CAPTURE_CUSTOM_BINDINGS_JS); source_map_.RegisterSource("platformApp", IDR_PLATFORM_APP_JS); + source_map_.RegisterSource("runtime", IDR_RUNTIME_CUSTOM_BINDINGS_JS); source_map_.RegisterSource("storage", IDR_STORAGE_CUSTOM_BINDINGS_JS); source_map_.RegisterSource("tabs", IDR_TABS_CUSTOM_BINDINGS_JS); source_map_.RegisterSource("tts", IDR_TTS_CUSTOM_BINDINGS_JS); @@ -621,6 +642,9 @@ void ExtensionDispatcher::DidCreateScriptContext( scoped_ptr<NativeHandler>(new PrintNativeHandler())); module_system->RegisterNativeHandler("lazy_background_page", scoped_ptr<NativeHandler>(new LazyBackgroundPageNativeHandler(this))); + module_system->RegisterNativeHandler("channel", + scoped_ptr<NativeHandler>(new ChannelNativeHandler( + static_cast<chrome::VersionInfo::Channel>(chrome_channel_)))); int manifest_version = 1; if (extension) diff --git a/chrome/renderer/extensions/extension_dispatcher.h b/chrome/renderer/extensions/extension_dispatcher.h index cb7f60a..086656f 100644 --- a/chrome/renderer/extensions/extension_dispatcher.h +++ b/chrome/renderer/extensions/extension_dispatcher.h @@ -122,6 +122,7 @@ class ExtensionDispatcher : public content::RenderProcessObserver { virtual void WebKitInitialized() OVERRIDE; virtual void IdleNotification() OVERRIDE; + void OnSetChannel(int channel); void OnMessageInvoke(const std::string& extension_id, const std::string& function_name, const base::ListValue& args, @@ -237,6 +238,10 @@ class ExtensionDispatcher : public content::RenderProcessObserver { // Sends API requests to the extension host. scoped_ptr<ExtensionRequestSender> request_sender_; + // The current channel. From VersionInfo::GetChannel(). + // TODO(aa): Remove when we can restrict non-permission APIs to dev-only. + int chrome_channel_; + DISALLOW_COPY_AND_ASSIGN(ExtensionDispatcher); }; diff --git a/chrome/renderer/renderer_resources.grd b/chrome/renderer/renderer_resources.grd index 86594ee..a9256645 100644 --- a/chrome/renderer/renderer_resources.grd +++ b/chrome/renderer/renderer_resources.grd @@ -43,7 +43,6 @@ without changes to the corresponding grd file. fb9 --> <include name="IDR_DECLARATIVE_WEBREQUEST_CUSTOM_BINDINGS_JS" file="resources\extensions\declarative_webrequest_custom_bindings.js" type="BINDATA" /> <include name="IDR_DEVTOOLS_CUSTOM_BINDINGS_JS" file="resources\extensions\devtools_custom_bindings.js" type="BINDATA" /> <include name="IDR_EXPERIMENTAL_OFFSCREENTABS_CUSTOM_BINDINGS_JS" file="resources\extensions\experimental.offscreenTabs_custom_bindings.js" type="BINDATA" /> - <include name="IDR_EXPERIMENTAL_RUNTIME_CUSTOM_BINDINGS_JS" file="resources\extensions\experimental.runtime_custom_bindings.js" type="BINDATA" /> <include name="IDR_EXPERIMENTAL_USB_CUSTOM_BINDINGS_JS" file="resources\extensions\experimental.usb_custom_bindings.js" type="BINDATA" /> <include name="IDR_EXTENSION_CUSTOM_BINDINGS_JS" file="resources\extensions\extension_custom_bindings.js" type="BINDATA" /> <include name="IDR_FILE_BROWSER_HANDLER_CUSTOM_BINDINGS_JS" file="resources\extensions\file_browser_handler_custom_bindings.js" type="BINDATA" /> @@ -55,6 +54,7 @@ without changes to the corresponding grd file. fb9 --> <include name="IDR_PAGE_ACTIONS_CUSTOM_BINDINGS_JS" file="resources\extensions\page_actions_custom_bindings.js" type="BINDATA" /> <include name="IDR_PAGE_ACTION_CUSTOM_BINDINGS_JS" file="resources\extensions\page_action_custom_bindings.js" type="BINDATA" /> <include name="IDR_PAGE_CAPTURE_CUSTOM_BINDINGS_JS" file="resources\extensions\page_capture_custom_bindings.js" type="BINDATA" /> + <include name="IDR_RUNTIME_CUSTOM_BINDINGS_JS" file="resources\extensions\runtime_custom_bindings.js" type="BINDATA" /> <include name="IDR_STORAGE_CUSTOM_BINDINGS_JS" file="resources\extensions\storage_custom_bindings.js" type="BINDATA" /> <include name="IDR_TABS_CUSTOM_BINDINGS_JS" file="resources\extensions\tabs_custom_bindings.js" type="BINDATA" /> <include name="IDR_TTS_CUSTOM_BINDINGS_JS" file="resources\extensions\tts_custom_bindings.js" type="BINDATA" /> diff --git a/chrome/renderer/resources/extensions/experimental.runtime_custom_bindings.js b/chrome/renderer/resources/extensions/runtime_custom_bindings.js index 7d70ee2..8fb713f 100644 --- a/chrome/renderer/resources/extensions/experimental.runtime_custom_bindings.js +++ b/chrome/renderer/resources/extensions/runtime_custom_bindings.js @@ -9,7 +9,7 @@ var GetExtensionViews = extensionNatives.GetExtensionViews; var chromeHidden = requireNative('chrome_hidden').GetChromeHidden(); var sendRequest = require('sendRequest').sendRequest; -chromeHidden.registerCustomHook('experimental.runtime', function(bindingsAPI) { +chromeHidden.registerCustomHook('runtime', function(bindingsAPI) { var apiFunctions = bindingsAPI.apiFunctions; apiFunctions.setCustomCallback('getBackgroundPage', diff --git a/chrome/renderer/resources/extensions/schema_generated_bindings.js b/chrome/renderer/resources/extensions/schema_generated_bindings.js index d28c7d5..29700bb 100644 --- a/chrome/renderer/resources/extensions/schema_generated_bindings.js +++ b/chrome/renderer/resources/extensions/schema_generated_bindings.js @@ -14,7 +14,7 @@ requireNative('apiDefinitions').GetExtensionAPIDefinition; var sendRequest = require('sendRequest').sendRequest; var utils = require('utils'); - + var isDevChannel = requireNative('channel').IsDevChannel; var chromeHidden = requireNative('chrome_hidden').GetChromeHidden(); // The object to generate the bindings for "internal" APIs in, so that @@ -338,9 +338,18 @@ manifestVersion <= schemaNode.maximumManifestVersion; } + // Temporary hack to check if the runtime API is supported. + // TODO(aa): Remove when we can restrict non-permission APIs to dev-only. + function isRuntimeAPISupported(schemaNode) { + if (schemaNode.namespace == "runtime") + return isDevChannel(); + return true; + } + function isSchemaNodeSupported(schemaNode, platform, manifestVersion) { return isPlatformSupported(schemaNode, platform) && - isManifestVersionSupported(schemaNode, manifestVersion); + isManifestVersionSupported(schemaNode, manifestVersion) && + isRuntimeAPISupported(schemaNode); } chromeHidden.onLoad.addListener(function(extensionId, |