| Index: base/task.h
|
| diff --git a/base/task.h b/base/task.h
|
| index 3d29d43cd6d6a3d85c84cc0865208b0048e266dd..9666a65c0b5c26df0e406e1a571bcad5c8ba3c3c 100644
|
| --- a/base/task.h
|
| +++ b/base/task.h
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// 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.
|
|
|
| @@ -65,148 +65,6 @@ class BASE_EXPORT CancelableTask : public Task {
|
| virtual void Cancel() = 0;
|
| };
|
|
|
| -// Scoped Factories ------------------------------------------------------------
|
| -//
|
| -// These scoped factory objects can be used by non-refcounted objects to safely
|
| -// place tasks in a message loop. Each factory guarantees that the tasks it
|
| -// produces will not run after the factory is destroyed. Commonly, factories
|
| -// are declared as class members, so the class' tasks will automatically cancel
|
| -// when the class instance is destroyed.
|
| -//
|
| -// Exampe Usage:
|
| -//
|
| -// class MyClass {
|
| -// private:
|
| -// // This factory will be used to schedule invocations of SomeMethod.
|
| -// ScopedRunnableMethodFactory<MyClass> some_method_factory_;
|
| -//
|
| -// public:
|
| -// // It is safe to suppress warning 4355 here.
|
| -// MyClass() : ALLOW_THIS_IN_INITIALIZER_LIST(some_method_factory_(this)) { }
|
| -//
|
| -// void SomeMethod() {
|
| -// // If this function might be called directly, you might want to revoke
|
| -// // any outstanding runnable methods scheduled to call it. If it's not
|
| -// // referenced other than by the factory, this is unnecessary.
|
| -// some_method_factory_.RevokeAll();
|
| -// ...
|
| -// }
|
| -//
|
| -// void ScheduleSomeMethod() {
|
| -// // If you'd like to only only have one pending task at a time, test for
|
| -// // |empty| before manufacturing another task.
|
| -// if (!some_method_factory_.empty())
|
| -// return;
|
| -//
|
| -// // The factories are not thread safe, so always invoke on
|
| -// // |MessageLoop::current()|.
|
| -// MessageLoop::current()->PostDelayedTask(
|
| -// FROM_HERE,
|
| -// some_method_factory_.NewRunnableMethod(&MyClass::SomeMethod),
|
| -// kSomeMethodDelayMS);
|
| -// }
|
| -// };
|
| -
|
| -// A ScopedRunnableMethodFactory creates runnable methods for a specified
|
| -// object. This is particularly useful for generating callbacks for
|
| -// non-reference counted objects when the factory is a member of the object.
|
| -template<class T>
|
| -class ScopedRunnableMethodFactory {
|
| - public:
|
| - explicit ScopedRunnableMethodFactory(T* object) : weak_factory_(object) {
|
| - }
|
| -
|
| - template <class Method>
|
| - inline CancelableTask* NewRunnableMethod(Method method) {
|
| - return new RunnableMethod<Method, Tuple0>(
|
| - weak_factory_.GetWeakPtr(), method, MakeTuple());
|
| - }
|
| -
|
| - template <class Method, class A>
|
| - inline CancelableTask* NewRunnableMethod(Method method, const A& a) {
|
| - return new RunnableMethod<Method, Tuple1<A> >(
|
| - weak_factory_.GetWeakPtr(), method, MakeTuple(a));
|
| - }
|
| -
|
| - template <class Method, class A, class B>
|
| - inline CancelableTask* NewRunnableMethod(Method method, const A& a,
|
| - const B& b) {
|
| - return new RunnableMethod<Method, Tuple2<A, B> >(
|
| - weak_factory_.GetWeakPtr(), method, MakeTuple(a, b));
|
| - }
|
| -
|
| - template <class Method, class A, class B, class C>
|
| - inline CancelableTask* NewRunnableMethod(Method method,
|
| - const A& a,
|
| - const B& b,
|
| - const C& c) {
|
| - return new RunnableMethod<Method, Tuple3<A, B, C> >(
|
| - weak_factory_.GetWeakPtr(), method, MakeTuple(a, b, c));
|
| - }
|
| -
|
| - template <class Method, class A, class B, class C, class D>
|
| - inline CancelableTask* NewRunnableMethod(Method method,
|
| - const A& a,
|
| - const B& b,
|
| - const C& c,
|
| - const D& d) {
|
| - return new RunnableMethod<Method, Tuple4<A, B, C, D> >(
|
| - weak_factory_.GetWeakPtr(), method, MakeTuple(a, b, c, d));
|
| - }
|
| -
|
| - template <class Method, class A, class B, class C, class D, class E>
|
| - inline CancelableTask* NewRunnableMethod(Method method,
|
| - const A& a,
|
| - const B& b,
|
| - const C& c,
|
| - const D& d,
|
| - const E& e) {
|
| - return new RunnableMethod<Method, Tuple5<A, B, C, D, E> >(
|
| - weak_factory_.GetWeakPtr(), method, MakeTuple(a, b, c, d, e));
|
| - }
|
| -
|
| - void RevokeAll() { weak_factory_.InvalidateWeakPtrs(); }
|
| -
|
| - bool empty() const { return !weak_factory_.HasWeakPtrs(); }
|
| -
|
| - protected:
|
| - template <class Method, class Params>
|
| - class RunnableMethod : public CancelableTask {
|
| - public:
|
| - RunnableMethod(const base::WeakPtr<T>& obj,
|
| - Method meth,
|
| - const Params& params)
|
| - : obj_(obj),
|
| - meth_(meth),
|
| - params_(params) {
|
| - COMPILE_ASSERT(
|
| - (base::internal::ParamsUseScopedRefptrCorrectly<Params>::value),
|
| - badscopedrunnablemethodparams);
|
| - }
|
| -
|
| - virtual void Run() {
|
| - if (obj_)
|
| - DispatchToMethod(obj_.get(), meth_, params_);
|
| - }
|
| -
|
| - virtual void Cancel() {
|
| - obj_.reset();
|
| - }
|
| -
|
| - private:
|
| - base::WeakPtr<T> obj_;
|
| - Method meth_;
|
| - Params params_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(RunnableMethod);
|
| - };
|
| -
|
| - private:
|
| - base::WeakPtrFactory<T> weak_factory_;
|
| -};
|
| -
|
| -// Delete helper for use with base::Bind(). If you're posting a task to delete
|
| -// an object, prefer DeleteSoon().
|
| template<typename T>
|
| void DeletePointer(T* obj) {
|
| delete obj;
|
|
|