Chromium Code Reviews| Index: mojo/public/java/bindings/src/org/chromium/mojo/bindings/DelegatingConnectionErrorHandler.java |
| diff --git a/mojo/public/java/bindings/src/org/chromium/mojo/bindings/DelegatingConnectionErrorHandler.java b/mojo/public/java/bindings/src/org/chromium/mojo/bindings/DelegatingConnectionErrorHandler.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..522e3ef3a86f58abf129e2d1bb1d3ae755633be4 |
| --- /dev/null |
| +++ b/mojo/public/java/bindings/src/org/chromium/mojo/bindings/DelegatingConnectionErrorHandler.java |
| @@ -0,0 +1,50 @@ |
| +// Copyright 2014 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. |
| + |
| +package org.chromium.mojo.bindings; |
| + |
| +import org.chromium.mojo.system.MojoException; |
| + |
| +import java.util.Collections; |
| +import java.util.Set; |
| +import java.util.WeakHashMap; |
| + |
| +/** |
| + * A {@link ConnectionErrorHandler} that delegate the errors to a list of registered handlers. This |
| + * class will use weak pointers to prevent keeping references to any handlers it delegates to. |
| + */ |
| +public class DelegatingConnectionErrorHandler implements ConnectionErrorHandler { |
| + |
| + /** |
| + * The registered handlers. This uses a {@link WeakHashMap} so that it doesn't prevent the |
| + * handler to be garbage collected. |
|
rmcilroy
2014/08/21 14:43:52
"to be"->"from being"
qsr
2014/08/22 08:11:18
Done.
|
| + */ |
| + private final Set<ConnectionErrorHandler> mHandlers = |
| + Collections.newSetFromMap(new WeakHashMap<ConnectionErrorHandler, Boolean>()); |
| + |
| + /** |
| + * @see ConnectionErrorHandler#onConnectionError(MojoException) |
| + */ |
| + @Override |
| + public void onConnectionError(MojoException e) { |
| + for (ConnectionErrorHandler handler : mHandlers) { |
| + handler.onConnectionError(e); |
| + } |
| + } |
| + |
| + /** |
| + * Add a handler that will be notified of any error this object receives. |
| + */ |
| + public void addConnectionErrorHandler(ConnectionErrorHandler handler) { |
| + mHandlers.add(handler); |
| + } |
| + |
| + /** |
| + * Remove a previously registered handler. |
| + */ |
| + public void removeConnectionErrorHandler(ConnectionErrorHandler handler) { |
| + mHandlers.remove(handler); |
| + } |
| + |
| +} |