1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "extensions/renderer/lazy_background_page_native_handler.h"
6
7#include "base/bind.h"
8#include "content/public/renderer/render_view.h"
9#include "extensions/common/extension_messages.h"
10#include "extensions/common/manifest_handlers/background_info.h"
11#include "extensions/renderer/extension_helper.h"
12#include "extensions/renderer/script_context.h"
13
14namespace extensions {
15
16LazyBackgroundPageNativeHandler::LazyBackgroundPageNativeHandler(
17    ScriptContext* context)
18    : ObjectBackedNativeHandler(context) {
19  RouteFunction(
20      "IncrementKeepaliveCount",
21      base::Bind(&LazyBackgroundPageNativeHandler::IncrementKeepaliveCount,
22                 base::Unretained(this)));
23  RouteFunction(
24      "DecrementKeepaliveCount",
25      base::Bind(&LazyBackgroundPageNativeHandler::DecrementKeepaliveCount,
26                 base::Unretained(this)));
27}
28
29void LazyBackgroundPageNativeHandler::IncrementKeepaliveCount(
30    const v8::FunctionCallbackInfo<v8::Value>& args) {
31  if (!context())
32    return;
33  content::RenderView* render_view = context()->GetRenderView();
34  if (IsContextLazyBackgroundPage(render_view, context()->extension())) {
35    render_view->Send(new ExtensionHostMsg_IncrementLazyKeepaliveCount(
36        render_view->GetRoutingID()));
37  }
38}
39
40void LazyBackgroundPageNativeHandler::DecrementKeepaliveCount(
41    const v8::FunctionCallbackInfo<v8::Value>& args) {
42  if (!context())
43    return;
44  content::RenderView* render_view = context()->GetRenderView();
45  if (IsContextLazyBackgroundPage(render_view, context()->extension())) {
46    render_view->Send(new ExtensionHostMsg_DecrementLazyKeepaliveCount(
47        render_view->GetRoutingID()));
48  }
49}
50
51bool LazyBackgroundPageNativeHandler::IsContextLazyBackgroundPage(
52    content::RenderView* render_view,
53    const Extension* extension) {
54  if (!render_view)
55    return false;
56
57  ExtensionHelper* helper = ExtensionHelper::Get(render_view);
58  return (extension && BackgroundInfo::HasLazyBackgroundPage(extension) &&
59          helper->view_type() == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE);
60}
61
62}  // namespace extensions
63