Index: chrome/renderer/extensions/extension_dispatcher.cc |
diff --git a/chrome/renderer/extensions/extension_dispatcher.cc b/chrome/renderer/extensions/extension_dispatcher.cc |
index 1d9625993911aa549914e7fe21c966e7370c2e5a..559b8ef6af3eacba108152f6c7431b5f2f936f98 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, |
@@ -526,8 +548,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); |
@@ -545,6 +565,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); |
@@ -622,6 +643,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) |