summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
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
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')
-rw-r--r--chrome/renderer/extensions/extension_dispatcher.cc34
-rw-r--r--chrome/renderer/extensions/extension_dispatcher.h5
-rw-r--r--chrome/renderer/renderer_resources.grd2
-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.js13
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,