Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / extensions / renderer / lazy_background_page_native_handler.cc
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
14 namespace extensions {
15
16 LazyBackgroundPageNativeHandler::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
29 void 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
40 void 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
51 bool 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