summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/extensions
diff options
context:
space:
mode:
authormpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-16 23:56:06 +0000
committermpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-16 23:56:06 +0000
commit15397b4b6bc600a8f4bf36a794d07dd057072e17 (patch)
treecdeebdde2f0f6e140595aea8e342f09b26bf8e43 /chrome/renderer/extensions
parente769f770492fce71f9211ae19745687acd0bf871 (diff)
downloadchromium_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.cc34
-rw-r--r--chrome/renderer/extensions/extension_dispatcher.h5
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);
};