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

Side by Side Diff: mojo/bindings/js/handle.h

Issue 214183003: Change mojo JS bindings to expose a handle object, which is Closed when garbage (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rm.extra.gc Created 6 years, 8 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef MOJO_BINDINGS_JS_HANDLE_H_ 5 #ifndef MOJO_BINDINGS_JS_HANDLE_H_
6 #define MOJO_BINDINGS_JS_HANDLE_H_ 6 #define MOJO_BINDINGS_JS_HANDLE_H_
7 7
8 #include "gin/converter.h" 8 #include "gin/converter.h"
9 #include "gin/handle.h"
10 #include "gin/wrappable.h"
9 #include "mojo/public/cpp/system/core.h" 11 #include "mojo/public/cpp/system/core.h"
10 12
11 namespace gin { 13 namespace gin {
12 14
15 // Wrapper for mojo Handles exposed to JavaScript. This ensures the Handle
16 // is Closed when its JS object is garbage collected.
17 class HandleWrapper : public gin::Wrappable<HandleWrapper> {
18 public:
19 static gin::WrapperInfo kWrapperInfo;
20
21 static gin::Handle<HandleWrapper> Create(v8::Isolate* isolate,
22 MojoHandle handle) {
23 return gin::CreateHandle(isolate, new HandleWrapper(handle));
24 }
25
26 mojo::Handle get() const { return handle_.get(); }
27 mojo::Handle release() { return handle_.release(); }
28 void Close() { handle_.reset(); }
29
30 protected:
31 HandleWrapper(MojoHandle handle);
32 virtual ~HandleWrapper();
33 mojo::ScopedHandle handle_;
34 };
35
36 // Note: It's important to use this converter rather than the one for
37 // MojoHandle, since that will do a simple int32 conversion. It's unfortunate
38 // there's no way to prevent against accidental use.
39 // TODO(mpcomplete): define converters for all Handle subtypes.
13 template<> 40 template<>
14 struct Converter<mojo::Handle> { 41 struct Converter<mojo::Handle> {
15 static v8::Handle<v8::Value> ToV8(v8::Isolate* isolate, 42 static v8::Handle<v8::Value> ToV8(v8::Isolate* isolate,
16 const mojo::Handle& val); 43 const mojo::Handle& val);
17 static bool FromV8(v8::Isolate* isolate, v8::Handle<v8::Value> val, 44 static bool FromV8(v8::Isolate* isolate, v8::Handle<v8::Value> val,
18 mojo::Handle* out); 45 mojo::Handle* out);
19 }; 46 };
20 47
21 } // namespace gin 48 } // namespace gin
22 49
23 #endif // MOJO_BINDINGS_JS_HANDLE_H_ 50 #endif // MOJO_BINDINGS_JS_HANDLE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698