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

Unified Diff: base/callback_registry_unittest.nc

Issue 23514056: Function-type templated CallbackRegistry (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Pure merge 2 Created 7 years, 3 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 | « base/callback_registry_unittest.cc ('k') | chrome/browser/chromeos/settings/cros_settings.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/callback_registry_unittest.nc
diff --git a/base/callback_registry_unittest.nc b/base/callback_registry_unittest.nc
new file mode 100644
index 0000000000000000000000000000000000000000..d67ad81b177a26e8d0d40de805a3a4c2e95fc25d
--- /dev/null
+++ b/base/callback_registry_unittest.nc
@@ -0,0 +1,51 @@
+// Copyright 2013 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 "base/callback_registry.h"
+
+#include "base/basictypes.h"
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/memory/scoped_ptr.h"
+
+namespace base {
+
+class Foo {
+ public:
+ Foo() {}
+ ~Foo() {}
+};
+
+class FooListener {
+ public:
+ FooListener() {}
+
+ void GotAScopedFoo(scoped_ptr<Foo> f) { foo_ = f.Pass(); }
+
+ scoped_ptr<Foo> foo_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(FooListener);
+};
+
+
+#if defined(NCTEST_MOVE_ONLY_TYPE_PARAMETER) // [r"calling a private constructor of class"]
+
+// Callbacks run with a move-only typed parameter.
+//
+// CallbackRegistry does not support move-only typed parameters. Notify() is
+// designed to take zero or more parameters, and run each registered callback
+// with them. With move-only types, the parameter will be set to NULL after the
+// first callback has been run.
+void WontCompile() {
+ FooListener f;
+ CallbackRegistry<void(scoped_ptr<Foo>)> c1;
+ scoped_ptr<CallbackRegistry<void(scoped_ptr<Foo>)>::Subscription> sub =
+ c1.Add(Bind(&FooListener::GotAScopedFoo, Unretained(&f)));
+ c1.Notify(scoped_ptr<Foo>(new Foo()));
+}
+
+#endif
+
+} // namespace base
« no previous file with comments | « base/callback_registry_unittest.cc ('k') | chrome/browser/chromeos/settings/cros_settings.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698