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

Unified Diff: chrome/browser/sync/util/weak_handle.h

Issue 9699057: [Sync] Move 'sync' target to sync/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address Tim's comments Created 8 years, 9 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
« no previous file with comments | « chrome/browser/sync/util/user_settings.h ('k') | chrome/browser/sync/util/weak_handle.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/sync/util/weak_handle.h
diff --git a/chrome/browser/sync/util/weak_handle.h b/chrome/browser/sync/util/weak_handle.h
deleted file mode 100644
index 28bfedac17c8068942448e7aaa29d2f8550fc267..0000000000000000000000000000000000000000
--- a/chrome/browser/sync/util/weak_handle.h
+++ /dev/null
@@ -1,379 +0,0 @@
-// Copyright (c) 2011 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.
-
-// Weak handles provides a way to refer to weak pointers from another
-// thread. This is useful because it is not safe to reference a weak
-// pointer from a thread other than the thread on which it was
-// created.
-//
-// Weak handles can be passed across threads, so for example, you can
-// use them to do the "real" work on one thread and get notified on
-// another thread:
-//
-// class FooIOWorker {
-// public:
-// FooIOWorker(const WeakHandle<Foo>& foo) : foo_(foo) {}
-//
-// void OnIOStart() {
-// foo_.Call(FROM_HERE, &Foo::OnIOStart);
-// }
-//
-// void OnIOEvent(IOEvent e) {
-// foo_.Call(FROM_HERE, &Foo::OnIOEvent, e);
-// }
-//
-// void OnIOError(IOError err) {
-// foo_.Call(FROM_HERE, &Foo::OnIOError, err);
-// }
-//
-// private:
-// const WeakHandle<Foo> foo_;
-// };
-//
-// class Foo : public SupportsWeakPtr<Foo>, public NonThreadSafe {
-// public:
-// Foo() {
-// SpawnFooIOWorkerOnIOThread(base::MakeWeakHandle(AsWeakPtr()));
-// }
-//
-// /* Will always be called on the correct thread, and only if this
-// object hasn't been destroyed. */
-// void OnIOStart() { DCHECK(CalledOnValidThread(); ... }
-// void OnIOEvent(IOEvent e) { DCHECK(CalledOnValidThread(); ... }
-// void OnIOError(IOError err) { DCHECK(CalledOnValidThread(); ... }
-// };
-
-#ifndef CHROME_BROWSER_SYNC_UTIL_WEAK_HANDLE_H_
-#define CHROME_BROWSER_SYNC_UTIL_WEAK_HANDLE_H_
-#pragma once
-
-#include <cstddef>
-
-#include "base/basictypes.h"
-#include "base/bind.h"
-#include "base/callback_forward.h"
-#include "base/compiler_specific.h"
-#include "base/gtest_prod_util.h"
-#include "base/location.h"
-#include "base/logging.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/weak_ptr.h"
-
-namespace base {
-class MessageLoopProxy;
-} // namespace base
-
-namespace tracked_objects {
-class Location;
-} // namespace tracked_objects
-
-namespace browser_sync {
-
-template <typename T> class WeakHandle;
-
-namespace internal {
-// These classes are part of the WeakHandle implementation. DO NOT
-// USE THESE CLASSES DIRECTLY YOURSELF.
-
-// Adapted from base/callback_internal.h.
-
-template <typename T>
-struct ParamTraits {
- typedef const T& ForwardType;
-};
-
-template <typename T>
-struct ParamTraits<T&> {
- typedef T& ForwardType;
-};
-
-template <typename T, size_t n>
-struct ParamTraits<T[n]> {
- typedef const T* ForwardType;
-};
-
-template <typename T>
-struct ParamTraits<T[]> {
- typedef const T* ForwardType;
-};
-
-// Base class for WeakHandleCore<T> to avoid template bloat. Handles
-// the interaction with the owner thread and its message loop.
-class WeakHandleCoreBase {
- public:
- // Assumes the current thread is the owner thread.
- WeakHandleCoreBase();
-
- // May be called on any thread.
- bool IsOnOwnerThread() const;
-
- protected:
- // May be destroyed on any thread.
- ~WeakHandleCoreBase();
-
- // May be called on any thread.
- void PostToOwnerThread(const tracked_objects::Location& from_here,
- const base::Closure& fn) const;
-
- private:
- // May be used on any thread.
- const scoped_refptr<base::MessageLoopProxy> owner_loop_proxy_;
-
- DISALLOW_COPY_AND_ASSIGN(WeakHandleCoreBase);
-};
-
-// WeakHandleCore<T> contains all the logic for WeakHandle<T>.
-template <typename T>
-class WeakHandleCore
- : public WeakHandleCoreBase,
- public base::RefCountedThreadSafe<WeakHandleCore<T> > {
- public:
- // Must be called on |ptr|'s owner thread, which is assumed to be
- // the current thread.
- explicit WeakHandleCore(const base::WeakPtr<T>& ptr) : ptr_(ptr) {}
-
- // Must be called on |ptr_|'s owner thread.
- base::WeakPtr<T> Get() const {
- CHECK(IsOnOwnerThread());
- return ptr_;
- }
-
- // Call(...) may be called on any thread, but all its arguments
- // should be safe to be bound and copied across threads.
-
- template <typename U>
- void Call(const tracked_objects::Location& from_here,
- void (U::*fn)(void)) const {
- PostToOwnerThread(
- from_here,
- Bind(&WeakHandleCore::template DoCall0<U>, this, fn));
- }
-
- template <typename U, typename A1>
- void Call(const tracked_objects::Location& from_here,
- void (U::*fn)(A1),
- typename ParamTraits<A1>::ForwardType a1) const {
- PostToOwnerThread(
- from_here,
- Bind(&WeakHandleCore::template DoCall1<U, A1>,
- this, fn, a1));
- }
-
- template <typename U, typename A1, typename A2>
- void Call(const tracked_objects::Location& from_here,
- void (U::*fn)(A1, A2),
- typename ParamTraits<A1>::ForwardType a1,
- typename ParamTraits<A2>::ForwardType a2) const {
- PostToOwnerThread(
- from_here,
- Bind(&WeakHandleCore::template DoCall2<U, A1, A2>,
- this, fn, a1, a2));
- }
-
- template <typename U, typename A1, typename A2, typename A3>
- void Call(const tracked_objects::Location& from_here,
- void (U::*fn)(A1, A2, A3),
- typename ParamTraits<A1>::ForwardType a1,
- typename ParamTraits<A2>::ForwardType a2,
- typename ParamTraits<A3>::ForwardType a3) const {
- PostToOwnerThread(
- from_here,
- Bind(&WeakHandleCore::template DoCall3<U, A1, A2, A3>,
- this, fn, a1, a2, a3));
- }
-
- template <typename U, typename A1, typename A2, typename A3, typename A4>
- void Call(const tracked_objects::Location& from_here,
- void (U::*fn)(A1, A2, A3, A4),
- typename ParamTraits<A1>::ForwardType a1,
- typename ParamTraits<A2>::ForwardType a2,
- typename ParamTraits<A3>::ForwardType a3,
- typename ParamTraits<A4>::ForwardType a4) const {
- PostToOwnerThread(
- from_here,
- Bind(&WeakHandleCore::template DoCall4<U, A1, A2, A3, A4>,
- this, fn, a1, a2, a3, a4));
- }
-
- private:
- friend class base::RefCountedThreadSafe<WeakHandleCore<T> >;
-
- // May be destroyed on any thread.
- ~WeakHandleCore() {}
-
- // GCC 4.2.1 on OS X gets confused if all the DoCall functions are
- // named the same, so we distinguish them.
-
- template <typename U>
- void DoCall0(void (U::*fn)(void)) const {
- CHECK(IsOnOwnerThread());
- if (!Get()) {
- return;
- }
- (Get()->*fn)();
- }
-
- template <typename U, typename A1>
- void DoCall1(void (U::*fn)(A1),
- typename ParamTraits<A1>::ForwardType a1) const {
- CHECK(IsOnOwnerThread());
- if (!Get()) {
- return;
- }
- (Get()->*fn)(a1);
- }
-
- template <typename U, typename A1, typename A2>
- void DoCall2(void (U::*fn)(A1, A2),
- typename ParamTraits<A1>::ForwardType a1,
- typename ParamTraits<A2>::ForwardType a2) const {
- CHECK(IsOnOwnerThread());
- if (!Get()) {
- return;
- }
- (Get()->*fn)(a1, a2);
- }
-
- template <typename U, typename A1, typename A2, typename A3>
- void DoCall3(void (U::*fn)(A1, A2, A3),
- typename ParamTraits<A1>::ForwardType a1,
- typename ParamTraits<A2>::ForwardType a2,
- typename ParamTraits<A3>::ForwardType a3) const {
- CHECK(IsOnOwnerThread());
- if (!Get()) {
- return;
- }
- (Get()->*fn)(a1, a2, a3);
- }
-
- template <typename U, typename A1, typename A2, typename A3, typename A4>
- void DoCall4(void (U::*fn)(A1, A2, A3, A4),
- typename ParamTraits<A1>::ForwardType a1,
- typename ParamTraits<A2>::ForwardType a2,
- typename ParamTraits<A3>::ForwardType a3,
- typename ParamTraits<A4>::ForwardType a4) const {
- CHECK(IsOnOwnerThread());
- if (!Get()) {
- return;
- }
- (Get()->*fn)(a1, a2, a3, a4);
- }
-
- // Must be dereferenced only on the owner thread. May be destroyed
- // from any thread.
- base::WeakPtr<T> ptr_;
-
- DISALLOW_COPY_AND_ASSIGN(WeakHandleCore);
-};
-
-} // namespace internal
-
-// May be destroyed on any thread.
-// Copying and assignment are welcome.
-template <typename T>
-class WeakHandle {
- public:
- // Creates an uninitialized WeakHandle.
- WeakHandle() {}
-
- // Creates an initialized WeakHandle from |ptr|.
- explicit WeakHandle(const base::WeakPtr<T>& ptr)
- : core_(new internal::WeakHandleCore<T>(ptr)) {}
-
- // Allow conversion from WeakHandle<U> to WeakHandle<T> if U is
- // convertible to T, but we *must* be on |other|'s owner thread.
- // Note that this doesn't override the regular copy constructor, so
- // that one can be called on any thread.
- template <typename U>
- WeakHandle(const browser_sync::WeakHandle<U>& other) // NOLINT
- : core_(
- other.IsInitialized() ?
- new internal::WeakHandleCore<T>(other.Get()) :
- NULL) {}
-
- // Returns true iff this WeakHandle is initialized. Note that being
- // initialized isn't a guarantee that the underlying object is still
- // alive.
- bool IsInitialized() const {
- return core_.get() != NULL;
- }
-
- // Resets to an uninitialized WeakHandle.
- void Reset() {
- core_ = NULL;
- }
-
- // Must be called only on the underlying object's owner thread.
- base::WeakPtr<T> Get() const {
- CHECK(IsInitialized());
- CHECK(core_->IsOnOwnerThread());
- return core_->Get();
- }
-
- // Call(...) may be called on any thread, but all its arguments
- // should be safe to be bound and copied across threads.
-
- template <typename U>
- void Call(const tracked_objects::Location& from_here,
- void (U::*fn)(void)) const {
- CHECK(IsInitialized());
- core_->Call(from_here, fn);
- }
-
- template <typename U, typename A1>
- void Call(const tracked_objects::Location& from_here,
- void (U::*fn)(A1),
- typename internal::ParamTraits<A1>::ForwardType a1) const {
- CHECK(IsInitialized());
- core_->Call(from_here, fn, a1);
- }
-
- template <typename U, typename A1, typename A2>
- void Call(const tracked_objects::Location& from_here,
- void (U::*fn)(A1, A2),
- typename internal::ParamTraits<A1>::ForwardType a1,
- typename internal::ParamTraits<A2>::ForwardType a2) const {
- CHECK(IsInitialized());
- core_->Call(from_here, fn, a1, a2);
- }
-
- template <typename U, typename A1, typename A2, typename A3>
- void Call(const tracked_objects::Location& from_here,
- void (U::*fn)(A1, A2, A3),
- typename internal::ParamTraits<A1>::ForwardType a1,
- typename internal::ParamTraits<A2>::ForwardType a2,
- typename internal::ParamTraits<A3>::ForwardType a3) const {
- CHECK(IsInitialized());
- core_->Call(from_here, fn, a1, a2, a3);
- }
-
- template <typename U, typename A1, typename A2, typename A3, typename A4>
- void Call(const tracked_objects::Location& from_here,
- void (U::*fn)(A1, A2, A3, A4),
- typename internal::ParamTraits<A1>::ForwardType a1,
- typename internal::ParamTraits<A2>::ForwardType a2,
- typename internal::ParamTraits<A3>::ForwardType a3,
- typename internal::ParamTraits<A4>::ForwardType a4) const {
- CHECK(IsInitialized());
- core_->Call(from_here, fn, a1, a2, a3, a4);
- }
-
- private:
- FRIEND_TEST_ALL_PREFIXES(WeakHandleTest,
- TypeConversionConstructor);
- FRIEND_TEST_ALL_PREFIXES(WeakHandleTest,
- TypeConversionConstructorAssignment);
-
- scoped_refptr<internal::WeakHandleCore<T> > core_;
-};
-
-// Makes a WeakHandle from a WeakPtr.
-template <typename T>
-WeakHandle<T> MakeWeakHandle(const base::WeakPtr<T>& ptr) {
- return WeakHandle<T>(ptr);
-}
-
-} // namespace browser_sync
-
-#endif // CHROME_BROWSER_SYNC_UTIL_WEAK_HANDLE_H_
« no previous file with comments | « chrome/browser/sync/util/user_settings.h ('k') | chrome/browser/sync/util/weak_handle.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698