// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "extensions/renderer/lazy_background_page_native_handler.h" #include "base/bind.h" #include "content/public/renderer/render_view.h" #include "extensions/common/extension_messages.h" #include "extensions/common/manifest_handlers/background_info.h" #include "extensions/renderer/extension_helper.h" #include "extensions/renderer/script_context.h" namespace extensions { LazyBackgroundPageNativeHandler::LazyBackgroundPageNativeHandler( ScriptContext* context) : ObjectBackedNativeHandler(context) { RouteFunction( "IncrementKeepaliveCount", base::Bind(&LazyBackgroundPageNativeHandler::IncrementKeepaliveCount, base::Unretained(this))); RouteFunction( "DecrementKeepaliveCount", base::Bind(&LazyBackgroundPageNativeHandler::DecrementKeepaliveCount, base::Unretained(this))); } void LazyBackgroundPageNativeHandler::IncrementKeepaliveCount( const v8::FunctionCallbackInfo& args) { if (!context()) return; content::RenderView* render_view = context()->GetRenderView(); if (IsContextLazyBackgroundPage(render_view, context()->extension())) { render_view->Send(new ExtensionHostMsg_IncrementLazyKeepaliveCount( render_view->GetRoutingID())); } } void LazyBackgroundPageNativeHandler::DecrementKeepaliveCount( const v8::FunctionCallbackInfo& args) { if (!context()) return; content::RenderView* render_view = context()->GetRenderView(); if (IsContextLazyBackgroundPage(render_view, context()->extension())) { render_view->Send(new ExtensionHostMsg_DecrementLazyKeepaliveCount( render_view->GetRoutingID())); } } bool LazyBackgroundPageNativeHandler::IsContextLazyBackgroundPage( content::RenderView* render_view, const Extension* extension) { if (!render_view) return false; ExtensionHelper* helper = ExtensionHelper::Get(render_view); return (extension && BackgroundInfo::HasLazyBackgroundPage(extension) && helper->view_type() == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE); } } // namespace extensions