~alinuxninja/nginx-edge/trunk

« back to all changes in this revision

Viewing changes to debian/modules/ngx_pagespeed/psol/include/third_party/chromium/src/base/ios/scoped_critical_action.h

  • Committer: Vivian
  • Date: 2015-12-04 18:20:11 UTC
  • Revision ID: git-v1:a36f2bc32e884f7473b3a47040e5411306144d7d
* Do not extract psol.tar.gz

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// Copyright (c) 2012 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
 
#ifndef BASE_IOS_SCOPED_CRITICAL_ACTION_H_
6
 
#define BASE_IOS_SCOPED_CRITICAL_ACTION_H_
7
 
 
8
 
#include "base/memory/ref_counted.h"
9
 
#include "base/synchronization/lock.h"
10
 
 
11
 
namespace base {
12
 
namespace ios {
13
 
 
14
 
// This class attempts to allow the application to continue to run for a period
15
 
// of time after it transitions to the background. The construction of an
16
 
// instance of this class marks the beginning of a task that needs background
17
 
// running time when the application is moved to the background and the
18
 
// destruction marks the end of such a task.
19
 
//
20
 
// Note there is no guarantee that the task will continue to finish when the
21
 
// application is moved to the background.
22
 
//
23
 
// This class should be used at times where leaving a task unfinished might be
24
 
// detrimental to user experience. For example, it should be used to ensure that
25
 
// the application has enough time to save important data or at least attempt to
26
 
// save such data.
27
 
class ScopedCriticalAction {
28
 
 public:
29
 
  ScopedCriticalAction();
30
 
  ~ScopedCriticalAction();
31
 
 
32
 
 private:
33
 
  // Core logic; ScopedCriticalAction should not be reference counted so
34
 
  // that it follows the normal pattern of stack-allocating ScopedFoo objects,
35
 
  // but the expiration handler needs to have a reference counted object to
36
 
  // refer to.
37
 
  class Core : public base::RefCountedThreadSafe<Core> {
38
 
   public:
39
 
    Core();
40
 
 
41
 
    // Informs the OS that the background task has completed.
42
 
    void EndBackgroundTask();
43
 
 
44
 
   private:
45
 
    friend base::RefCountedThreadSafe<Core>;
46
 
    ~Core();
47
 
 
48
 
    // |UIBackgroundTaskIdentifier| returned by
49
 
    // |beginBackgroundTaskWithExpirationHandler:| when marking the beginning of
50
 
    // a long-running background task. It is defined as an |unsigned int|
51
 
    // instead of a |UIBackgroundTaskIdentifier| so this class can be used in
52
 
    // .cc files.
53
 
    unsigned int background_task_id_;
54
 
    Lock background_task_id_lock_;
55
 
 
56
 
    DISALLOW_COPY_AND_ASSIGN(Core);
57
 
  };
58
 
 
59
 
  // The instance of the core that drives the background task.
60
 
  scoped_refptr<Core> core_;
61
 
 
62
 
  DISALLOW_COPY_AND_ASSIGN(ScopedCriticalAction);
63
 
};
64
 
 
65
 
}  // namespace ios
66
 
}  // namespace base
67
 
 
68
 
#endif  // BASE_IOS_SCOPED_CRITICAL_ACTION_H_