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/extensions | |
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/extensions')
-rw-r--r-- | chrome/renderer/extensions/extension_dispatcher.cc | 34 | ||||
-rw-r--r-- | chrome/renderer/extensions/extension_dispatcher.h | 5 |
2 files changed, 34 insertions, 5 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); }; |