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

Side by Side Diff: mojo/public/java/bindings/src/org/chromium/mojo/bindings/AutoCloseableRouter.java

Issue 2250183003: Make the fuchsia mojo/public repo the source of truth. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 4 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 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 package org.chromium.mojo.bindings;
6
7 import org.chromium.mojo.system.Core;
8 import org.chromium.mojo.system.MessagePipeHandle;
9
10 import java.util.concurrent.Executor;
11
12 /**
13 * Wrapper around {@link Router} that will close the connection when not referen ced anymore.
14 */
15 class AutoCloseableRouter implements Router {
16
17 /**
18 * The underlying router.
19 */
20 private final Router mRouter;
21
22 /**
23 * The executor to close the underlying router.
24 */
25 private final Executor mExecutor;
26
27 /**
28 * Flags to keep track if this router owns an unclosed handle.
29 */
30 private boolean mOwnsHandle;
31
32 /**
33 * Constructor.
34 */
35 public AutoCloseableRouter(Core core, Router router) {
36 mRouter = router;
37 mExecutor = ExecutorFactory.getExecutorForCurrentThread(core);
38 mOwnsHandle = true;
39 }
40
41 /**
42 * @see Router#setIncomingMessageReceiver(MessageReceiverWithResponder)
43 */
44 @Override
45 public void setIncomingMessageReceiver(MessageReceiverWithResponder incoming MessageReceiver) {
46 mRouter.setIncomingMessageReceiver(incomingMessageReceiver);
47 }
48
49 /**
50 * @see HandleOwner#passHandle()
51 */
52 @Override
53 public MessagePipeHandle passHandle() {
54 mOwnsHandle = false;
55 return mRouter.passHandle();
56 }
57
58 /**
59 * @see MessageReceiver#accept(Message)
60 */
61 @Override
62 public boolean accept(Message message) {
63 return mRouter.accept(message);
64 }
65
66 /**
67 * @see MessageReceiverWithResponder#acceptWithResponder(Message, MessageRec eiver)
68 */
69 @Override
70 public boolean acceptWithResponder(Message message, MessageReceiver responde r) {
71 return mRouter.acceptWithResponder(message, responder);
72
73 }
74
75 /**
76 * @see Router#start()
77 */
78 @Override
79 public void start() {
80 mRouter.start();
81 }
82
83 /**
84 * @see Router#setErrorHandler(ConnectionErrorHandler)
85 */
86 @Override
87 public void setErrorHandler(ConnectionErrorHandler errorHandler) {
88 mRouter.setErrorHandler(errorHandler);
89 }
90
91 /**
92 * @see java.io.Closeable#close()
93 */
94 @Override
95 public void close() {
96 mRouter.close();
97 mOwnsHandle = false;
98 }
99
100 /**
101 * @see Object#finalize()
102 */
103 @Override
104 protected void finalize() throws Throwable {
105 if (mOwnsHandle) {
106 mExecutor.execute(new Runnable() {
107
108 @Override
109 public void run() {
110 close();
111 }
112 });
113 throw new IllegalStateException("Warning: Router objects should be e xplicitly closed " +
114 "when no longer required otherwise you may leak handles.");
115 }
116 super.finalize();
117 }
118 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698