| // Copyright (c) 2012 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 "chrome/browser/extensions/api/idle/idle_api.h" |
| |
| #include "base/bind.h" |
| #include "base/callback.h" |
| #include "chrome/browser/extensions/api/idle/idle_api_constants.h" |
| #include "chrome/browser/extensions/api/idle/idle_manager.h" |
| #include "chrome/browser/extensions/api/idle/idle_manager_factory.h" |
| |
| namespace { |
| |
| const int kMinThreshold = 15; // In seconds. Set >1 sec for security concerns. |
| const int kMaxThreshold = 4*60*60; // Four hours, in seconds. Not set |
| // arbitrarily high for security concerns. |
| |
| int ClampThreshold(int threshold) { |
| if (threshold < kMinThreshold) { |
| threshold = kMinThreshold; |
| } else if (threshold > kMaxThreshold) { |
| threshold = kMaxThreshold; |
| } |
| |
| return threshold; |
| } |
| |
| } // namespace |
| |
| namespace extensions { |
| |
| bool IdleQueryStateFunction::RunImpl() { |
| int threshold; |
| EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &threshold)); |
| threshold = ClampThreshold(threshold); |
| |
| IdleManagerFactory::GetForProfile(GetProfile())->QueryState( |
| threshold, base::Bind(&IdleQueryStateFunction::IdleStateCallback, this)); |
| |
| // Don't send the response, it'll be sent by our callback |
| return true; |
| } |
| |
| void IdleQueryStateFunction::IdleStateCallback(IdleState state) { |
| SetResult(IdleManager::CreateIdleValue(state)); |
| SendResponse(true); |
| } |
| |
| bool IdleSetDetectionIntervalFunction::RunImpl() { |
| int threshold; |
| EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &threshold)); |
| threshold = ClampThreshold(threshold); |
| |
| IdleManagerFactory::GetForProfile(GetProfile()) |
| ->SetThreshold(extension_id(), threshold); |
| |
| return true; |
| } |
| |
| } // namespace extensions |