Chromium Code Reviews| Index: chrome/renderer/extensions/extension_dispatcher.cc |
| diff --git a/chrome/renderer/extensions/extension_dispatcher.cc b/chrome/renderer/extensions/extension_dispatcher.cc |
| index 3e8af8d95b04002400dbddaefedffc14f9cbcfb8..3c623593f089525f9fa35cf25c199206f6c8e215 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_view_type.h" |
| #include "chrome/common/extensions/api/extension_api.h" |
| #include "chrome/common/extensions/extension.h" |
| #include "chrome/common/extensions/extension_messages.h" |
| @@ -24,6 +25,7 @@ |
| #include "chrome/renderer/extensions/experimental.socket_custom_bindings.h" |
| #include "chrome/renderer/extensions/extension_custom_bindings.h" |
| #include "chrome/renderer/extensions/extension_groups.h" |
| +#include "chrome/renderer/extensions/extension_helper.h" |
| #include "chrome/renderer/extensions/extension_request_sender.h" |
| #include "chrome/renderer/extensions/file_browser_handler_custom_bindings.h" |
| #include "chrome/renderer/extensions/file_browser_private_custom_bindings.h" |
| @@ -120,6 +122,54 @@ class PrintNativeHandler : public NativeHandler { |
| } |
| }; |
| +class LazyBackgroundPageNativeHandler : public ChromeV8Extension { |
| + public: |
| + explicit LazyBackgroundPageNativeHandler(ExtensionDispatcher* dispatcher) |
| + : ChromeV8Extension(dispatcher) { |
| + RouteFunction("IncrementKeepaliveCount", |
| + base::Bind(&LazyBackgroundPageNativeHandler::IncrementKeepaliveCount, |
| + base::Unretained(this))); |
| + RouteFunction("DecrementKeepaliveCount", |
| + base::Bind(&LazyBackgroundPageNativeHandler::DecrementKeepaliveCount, |
| + base::Unretained(this))); |
| + } |
| + |
| + v8::Handle<v8::Value> IncrementKeepaliveCount(const v8::Arguments& args) { |
| + ChromeV8Context* context = |
| + extension_dispatcher()->v8_context_set().GetCurrent(); |
| + if (IsLazyBackgroundPage(context->extension_id())) { |
| + content::RenderThread::Get()->Send( |
| + new ExtensionHostMsg_IncrementLazyKeepaliveCount( |
| + context->extension_id())); |
| + } |
| + return v8::Undefined(); |
| + } |
| + |
| + v8::Handle<v8::Value> DecrementKeepaliveCount(const v8::Arguments& args) { |
| + ChromeV8Context* context = |
| + extension_dispatcher()->v8_context_set().GetCurrent(); |
| + if (IsLazyBackgroundPage(context->extension_id())) { |
| + content::RenderThread::Get()->Send( |
| + new ExtensionHostMsg_DecrementLazyKeepaliveCount( |
| + context->extension_id())); |
| + } |
| + return v8::Undefined(); |
| + } |
| + |
| + private: |
| + bool IsLazyBackgroundPage(const std::string& extension_id) { |
|
Yoyo Zhou
2012/04/04 18:52:24
This name seems to be... off.
Matt Perry
2012/04/04 19:21:44
Changed to IsCurrentContextLazyBackgroundPage
|
| + content::RenderView* render_view = GetCurrentRenderView(); |
| + if (!render_view) |
| + return false; |
| + |
| + ExtensionHelper* helper = ExtensionHelper::Get(render_view); |
| + const ::Extension* extension = |
| + extension_dispatcher()->extensions()->GetByID(extension_id); |
| + return (extension && extension->has_lazy_background_page() && |
| + helper->view_type() == chrome::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE); |
| + } |
| +}; |
| + |
| void InstallAppBindings(ModuleSystem* module_system, |
| v8::Handle<v8::Object> chrome, |
| v8::Handle<v8::Object> chrome_hidden) { |
| @@ -540,6 +590,8 @@ void ExtensionDispatcher::DidCreateScriptContext( |
| scoped_ptr<NativeHandler>(new ChromeHiddenNativeHandler())); |
| module_system->RegisterNativeHandler("print", |
| scoped_ptr<NativeHandler>(new PrintNativeHandler())); |
| + module_system->RegisterNativeHandler("lazy_background_page", |
| + scoped_ptr<NativeHandler>(new LazyBackgroundPageNativeHandler(this))); |
| int manifest_version = 1; |
| if (extension) |