Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1280)

Unified Diff: chrome/browser/extensions/extension_idle_api.cc

Issue 10750016: Moved c/b/e/*idle* to c/b/e/api/idle/ (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Sync with trunk Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_idle_api.cc
diff --git a/chrome/browser/extensions/extension_idle_api.cc b/chrome/browser/extensions/extension_idle_api.cc
deleted file mode 100644
index 3501159503666ffeb0b6874153549d8c83353c85..0000000000000000000000000000000000000000
--- a/chrome/browser/extensions/extension_idle_api.cc
+++ /dev/null
@@ -1,272 +0,0 @@
-// 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/extension_idle_api.h"
-
-#include <algorithm>
-#include <map>
-#include <string>
-
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/json/json_writer.h"
-#include "base/message_loop.h"
-#include "base/stl_util.h"
-#include "base/time.h"
-#include "chrome/browser/extensions/event_router.h"
-#include "chrome/browser/extensions/extension_host.h"
-#include "chrome/browser/extensions/extension_idle_api_constants.h"
-#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/common/extensions/extension.h"
-#include "content/public/browser/render_view_host.h"
-
-namespace keys = extension_idle_api_constants;
-
-namespace {
-
-const int kIdlePollInterval = 1; // Number of seconds between status checks
- // when polling for active.
-const int kThrottleInterval = 1; // Number of seconds to throttle idle checks
- // for. Return the previously checked idle
- // state if the next check is faster than this
-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.
-const unsigned int kMaxCacheSize = 100; // Number of state queries to cache.
-
-// Calculates the error query interval has in respect to idle interval.
-// The error is defined as amount of the query interval that is not part of the
-// idle interval.
-double QueryErrorFromIdle(double idle_start,
- double idle_end,
- double query_start,
- double query_end) {
- return query_end - idle_end + std::max(0., idle_start - query_start);
-}
-
-// Internal class which is used to poll for changes in the system idle state.
-class ExtensionIdlePollingTask {
- public:
- explicit ExtensionIdlePollingTask(int threshold, IdleState last_state,
- Profile* profile) : threshold_(threshold), last_state_(last_state),
- profile_(profile) {}
-
- // Check if we're active; then restart the polling task. Do this till we are
- // are in active state.
- void CheckIdleState();
- void IdleStateCallback(IdleState state);
-
- // Create a poll task to check for Idle state
- static void CreateNewPollTask(int threshold, IdleState state,
- Profile* profile);
-
- private:
- int threshold_;
- IdleState last_state_;
- Profile* profile_;
-
- static bool poll_task_running_;
-
- DISALLOW_COPY_AND_ASSIGN(ExtensionIdlePollingTask);
-};
-
-// Implementation of ExtensionIdlePollingTask.
-bool ExtensionIdlePollingTask::poll_task_running_ = false;
-
-void ExtensionIdlePollingTask::IdleStateCallback(IdleState current_state) {
- // If we just came into an active state, notify the extension.
- if (IDLE_STATE_ACTIVE == current_state && last_state_ != current_state)
- ExtensionIdleEventRouter::OnIdleStateChange(profile_, current_state);
-
- ExtensionIdlePollingTask::poll_task_running_ = false;
-
- ExtensionIdleCache::UpdateCache(threshold_, current_state);
-
- // Startup another polling task as we exit.
- if (current_state != IDLE_STATE_ACTIVE)
- ExtensionIdlePollingTask::CreateNewPollTask(threshold_, current_state,
- profile_);
-
- // This instance won't be needed anymore.
- delete this;
-}
-
-void ExtensionIdlePollingTask::CheckIdleState() {
- CalculateIdleState(threshold_,
- base::Bind(&ExtensionIdlePollingTask::IdleStateCallback,
- base::Unretained(this)));
-}
-
-// static
-void ExtensionIdlePollingTask::CreateNewPollTask(int threshold, IdleState state,
- Profile* profile) {
- if (ExtensionIdlePollingTask::poll_task_running_) return;
-
- ExtensionIdlePollingTask::poll_task_running_ = true;
- MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&ExtensionIdlePollingTask::CheckIdleState, base::Unretained(
- new ExtensionIdlePollingTask(threshold, state, profile))),
- base::TimeDelta::FromSeconds(kIdlePollInterval));
-}
-
-
-const char* IdleStateToDescription(IdleState state) {
- if (IDLE_STATE_ACTIVE == state)
- return keys::kStateActive;
- if (IDLE_STATE_IDLE == state)
- return keys::kStateIdle;
- return keys::kStateLocked;
-};
-
-// Helper function for reporting the idle state. The lifetime of the object
-// returned is controlled by the caller.
-StringValue* CreateIdleValue(IdleState idle_state) {
- StringValue* result = new StringValue(IdleStateToDescription(idle_state));
- return result;
-}
-
-int CheckThresholdBounds(int timeout) {
- if (timeout < kMinThreshold) return kMinThreshold;
- if (timeout > kMaxThreshold) return kMaxThreshold;
- return timeout;
-}
-
-}; // namespace
-
-void ExtensionIdleEventRouter::OnIdleStateChange(Profile* profile,
- IdleState state) {
- // Prepare the single argument of the current state.
- ListValue args;
- args.Append(CreateIdleValue(state));
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
-
- profile->GetExtensionEventRouter()->DispatchEventToRenderers(
- keys::kOnStateChanged, json_args, profile,
- GURL(), extensions::EventFilteringInfo());
-}
-
-bool ExtensionIdleQueryStateFunction::RunImpl() {
- int threshold;
- EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &threshold));
- threshold = CheckThresholdBounds(threshold);
-
- IdleState state = ExtensionIdleCache::CalculateIdleState(threshold);
- if (state != IDLE_STATE_UNKNOWN) {
- SetResult(CreateIdleValue(state));
- SendResponse(true);
- return true;
- }
-
- CalculateIdleState(threshold,
- base::Bind(&ExtensionIdleQueryStateFunction::IdleStateCallback,
- this, threshold));
- // Don't send the response, it'll be sent by our callback
- return true;
-}
-
-void ExtensionIdleQueryStateFunction::IdleStateCallback(int threshold,
- IdleState state) {
- // If our state is not active, make sure we're running a polling task to check
- // for active state and report it when it changes to active.
- if (state != IDLE_STATE_ACTIVE) {
- ExtensionIdlePollingTask::CreateNewPollTask(threshold, state, profile_);
- }
-
- SetResult(CreateIdleValue(state));
-
- ExtensionIdleCache::UpdateCache(threshold, state);
-
- SendResponse(true);
-}
-
-ExtensionIdleCache::CacheData ExtensionIdleCache::cached_data =
- {-1, -1, -1, -1};
-
-IdleState ExtensionIdleCache::CalculateIdleState(int threshold) {
- return CalculateState(threshold, base::Time::Now().ToDoubleT());
-}
-
-void ExtensionIdleCache::UpdateCache(int threshold, IdleState state) {
- Update(threshold, state, base::Time::Now().ToDoubleT());
-}
-
-IdleState ExtensionIdleCache::CalculateState(int threshold, double now) {
- if (threshold < kMinThreshold)
- return IDLE_STATE_UNKNOWN;
- double threshold_moment = now - static_cast<double>(threshold);
- double throttle_interval = static_cast<double>(kThrottleInterval);
-
- // We test for IDEL_STATE_LOCKED first, because the result should be
- // independent of the data for idle and active state. If last state was
- // LOCKED and test for LOCKED is satisfied we should always return LOCKED.
- if (cached_data.latest_locked > 0 &&
- now - cached_data.latest_locked < throttle_interval)
- return IDLE_STATE_LOCKED;
-
- // If thershold moment is beyond the moment after whih we are certain we have
- // been active, return active state. We allow kThrottleInterval error.
- if (cached_data.latest_known_active > 0 &&
- threshold_moment - cached_data.latest_known_active < throttle_interval)
- return IDLE_STATE_ACTIVE;
-
- // If total error that query interval has in respect to last recorded idle
- // interval is less than kThrottleInterval, return IDLE state.
- // query interval is the interval [now, now - threshold] and the error is
- // defined as amount of query interval that is outside of idle interval.
- double error_from_idle =
- QueryErrorFromIdle(cached_data.idle_interval_start,
- cached_data.idle_interval_end, threshold_moment, now);
- if (cached_data.idle_interval_end > 0 &&
- error_from_idle < throttle_interval)
- return IDLE_STATE_IDLE;
-
- return IDLE_STATE_UNKNOWN;
-}
-
-void ExtensionIdleCache::Update(int threshold, IdleState state, double now) {
- if (threshold < kMinThreshold)
- return;
- double threshold_moment = now - static_cast<double>(threshold);
- switch (state) {
- case IDLE_STATE_IDLE:
- if (threshold_moment > cached_data.idle_interval_end) {
- // Cached and new interval don't overlap. We disregard the cached one.
- cached_data.idle_interval_start = threshold_moment;
- } else {
- // Cached and new interval overlap, so we can combine them. We set
- // the cached interval begining to less recent one.
- cached_data.idle_interval_start =
- std::min(cached_data.idle_interval_start, threshold_moment);
- }
- cached_data.idle_interval_end = now;
- // Reset data for LOCKED state, since the last query result is not
- // LOCKED.
- cached_data.latest_locked = -1;
- break;
- case IDLE_STATE_ACTIVE:
- if (threshold_moment > cached_data.latest_known_active)
- cached_data.latest_known_active = threshold_moment;
- // Reset data for LOCKED state, since the last query result is not
- // LOCKED.
- cached_data.latest_locked = -1;
- break;
- case IDLE_STATE_LOCKED:
- if (threshold_moment > cached_data.latest_locked)
- cached_data.latest_locked = now;
- break;
- default:
- return;
- }
-}
-
-int ExtensionIdleCache::get_min_threshold() {
- return kMinThreshold;
-}
-
-double ExtensionIdleCache::get_throttle_interval() {
- return static_cast<double>(kThrottleInterval);
-}
« no previous file with comments | « chrome/browser/extensions/extension_idle_api.h ('k') | chrome/browser/extensions/extension_idle_api_constants.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698