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

Side by Side Diff: mojo/public/bindings/js/core.cc

Issue 89723002: Convert the rest of the functions in core.cc to use CreateFunctionTemplate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: realized didn't need changes to ArrayBuffer::Private Created 7 years 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #include "mojo/public/bindings/js/core.h" 5 #include "mojo/public/bindings/js/core.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "gin/arguments.h" 9 #include "gin/arguments.h"
10 #include "gin/array_buffer.h" 10 #include "gin/array_buffer.h"
11 #include "gin/converter.h" 11 #include "gin/converter.h"
12 #include "gin/dictionary.h" 12 #include "gin/dictionary.h"
13 #include "gin/function_template.h" 13 #include "gin/function_template.h"
14 #include "gin/per_isolate_data.h" 14 #include "gin/per_isolate_data.h"
15 #include "gin/public/wrapper_info.h" 15 #include "gin/public/wrapper_info.h"
16 #include "mojo/public/bindings/js/handle.h" 16 #include "mojo/public/bindings/js/handle.h"
17 17
18 namespace mojo { 18 namespace mojo {
19 namespace js { 19 namespace js {
20 20
21 namespace { 21 namespace {
22 22
23 void CreateMessagePipe(const v8::FunctionCallbackInfo<v8::Value>& info) { 23 gin::Dictionary CreateMessagePipe(const gin::Arguments& args) {
24 gin::Arguments args(info);
25
26 MojoHandle handle_0 = MOJO_HANDLE_INVALID; 24 MojoHandle handle_0 = MOJO_HANDLE_INVALID;
27 MojoHandle handle_1 = MOJO_HANDLE_INVALID; 25 MojoHandle handle_1 = MOJO_HANDLE_INVALID;
28 MojoResult result = MojoCreateMessagePipe(&handle_0, &handle_1); 26 MojoResult result = MojoCreateMessagePipe(&handle_0, &handle_1);
29 CHECK(result == MOJO_RESULT_OK); 27 CHECK(result == MOJO_RESULT_OK);
30 28
31 gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(info.GetIsolate()); 29 gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(args.isolate());
32 dictionary.Set("handle0", handle_0); 30 dictionary.Set("handle0", handle_0);
33 dictionary.Set("handle1", handle_1); 31 dictionary.Set("handle1", handle_1);
34 args.Return(dictionary); 32 return dictionary;
35 } 33 }
36 34
37 void WriteMessage(const v8::FunctionCallbackInfo<v8::Value>& info) { 35 MojoResult WriteMessage(MojoHandle handle,
38 gin::Arguments args(info); 36 const gin::ArrayBufferView& buffer,
39 37 const std::vector<MojoHandle>& handles,
40 MojoHandle handle = MOJO_HANDLE_INVALID; 38 MojoWriteMessageFlags flags) {
41 gin::ArrayBufferView buffer(args.isolate()); 39 return MojoWriteMessage(handle,
42 std::vector<MojoHandle> handles; 40 buffer.bytes(),
43 MojoWriteMessageFlags flags = MOJO_WRITE_MESSAGE_FLAG_NONE; 41 static_cast<uint32_t>(buffer.num_bytes()),
44 42 handles.empty() ? NULL : handles.data(),
45 if (!args.GetNext(&handle) || 43 static_cast<uint32_t>(handles.size()),
46 !args.GetNext(&buffer) || 44 flags);
47 !args.GetNext(&handles) ||
48 !args.GetNext(&flags)) {
49 return args.ThrowError();
50 }
51
52 args.Return(MojoWriteMessage(handle,
53 buffer.bytes(),
54 static_cast<uint32_t>(buffer.num_bytes()),
55 handles.empty() ? NULL : handles.data(),
56 static_cast<uint32_t>(handles.size()),
57 flags));
58 } 45 }
59 46
60 void ReadMessage(const v8::FunctionCallbackInfo<v8::Value>& info) { 47 gin::Dictionary ReadMessage(const gin::Arguments& args, MojoHandle handle,
61 gin::Arguments args(info); 48 MojoReadMessageFlags flags) {
62
63 MojoHandle handle = MOJO_HANDLE_INVALID;
64 MojoReadMessageFlags flags = MOJO_READ_MESSAGE_FLAG_NONE;
65
66 if (!args.GetNext(&handle) ||
67 !args.GetNext(&flags)) {
68 return args.ThrowError();
69 }
70
71 uint32_t num_bytes = 0; 49 uint32_t num_bytes = 0;
72 uint32_t num_handles = 0; 50 uint32_t num_handles = 0;
73 MojoResult result = MojoReadMessage( 51 MojoResult result = MojoReadMessage(
74 handle, NULL, &num_bytes, NULL, &num_handles, flags); 52 handle, NULL, &num_bytes, NULL, &num_handles, flags);
75 if (result != MOJO_RESULT_RESOURCE_EXHAUSTED) { 53 if (result != MOJO_RESULT_RESOURCE_EXHAUSTED) {
76 gin::Dictionary dictionary = gin::Dictionary::CreateEmpty( 54 gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(args.isolate());
77 info.GetIsolate());
78 dictionary.Set("result", result); 55 dictionary.Set("result", result);
79 args.Return(dictionary); 56 return dictionary;
80 } 57 }
81 58
82 v8::Handle<v8::ArrayBuffer> array_buffer = v8::ArrayBuffer::New(num_bytes); 59 v8::Handle<v8::ArrayBuffer> array_buffer = v8::ArrayBuffer::New(num_bytes);
83 std::vector<MojoHandle> handles(num_handles); 60 std::vector<MojoHandle> handles(num_handles);
84 61
85 gin::ArrayBuffer buffer(args.isolate()); 62 gin::ArrayBuffer buffer;
86 ConvertFromV8(array_buffer, &buffer); 63 ConvertFromV8(args.isolate(), array_buffer, &buffer);
87 CHECK(buffer.num_bytes() == num_bytes); 64 CHECK(buffer.num_bytes() == num_bytes);
88 65
89 result = MojoReadMessage(handle, 66 result = MojoReadMessage(handle,
90 buffer.bytes(), 67 buffer.bytes(),
91 &num_bytes, 68 &num_bytes,
92 handles.empty() ? NULL : handles.data(), 69 handles.empty() ? NULL : handles.data(),
93 &num_handles, 70 &num_handles,
94 flags); 71 flags);
95 72
96 CHECK(buffer.num_bytes() == num_bytes); 73 CHECK(buffer.num_bytes() == num_bytes);
97 CHECK(handles.size() == num_handles); 74 CHECK(handles.size() == num_handles);
98 75
99 gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(info.GetIsolate()); 76 gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(args.isolate());
100 dictionary.Set("result", result); 77 dictionary.Set("result", result);
101 dictionary.Set("buffer", array_buffer); 78 dictionary.Set("buffer", array_buffer);
102 dictionary.Set("handles", handles); 79 dictionary.Set("handles", handles);
103 args.Return(dictionary); 80 return dictionary;
104 } 81 }
105 82
106 gin::WrapperInfo g_wrapper_info = { gin::kEmbedderNativeGin }; 83 gin::WrapperInfo g_wrapper_info = { gin::kEmbedderNativeGin };
107 84
108 } // namespace 85 } // namespace
109 86
110 const char Core::kModuleName[] = "mojo/public/bindings/js/core"; 87 const char Core::kModuleName[] = "mojo/public/bindings/js/core";
111 88
112 v8::Local<v8::ObjectTemplate> Core::GetTemplate(v8::Isolate* isolate) { 89 v8::Local<v8::ObjectTemplate> Core::GetTemplate(v8::Isolate* isolate) {
113 gin::PerIsolateData* data = gin::PerIsolateData::From(isolate); 90 gin::PerIsolateData* data = gin::PerIsolateData::From(isolate);
114 v8::Local<v8::ObjectTemplate> templ = data->GetObjectTemplate( 91 v8::Local<v8::ObjectTemplate> templ = data->GetObjectTemplate(
115 &g_wrapper_info); 92 &g_wrapper_info);
116 93
117 if (templ.IsEmpty()) { 94 if (templ.IsEmpty()) {
118 templ = v8::ObjectTemplate::New(); 95 templ = v8::ObjectTemplate::New();
119 96
120 templ->Set(gin::StringToSymbol(isolate, "close"), 97 templ->Set(gin::StringToSymbol(isolate, "close"),
121 gin::CreateFunctionTemplate(isolate, 98 gin::CreateFunctionTemplate(isolate,
122 base::Bind(mojo::CloseRaw))); 99 base::Bind(mojo::CloseRaw)));
123 templ->Set(gin::StringToSymbol(isolate, "wait"), 100 templ->Set(gin::StringToSymbol(isolate, "wait"),
124 gin::CreateFunctionTemplate(isolate, base::Bind(mojo::Wait))); 101 gin::CreateFunctionTemplate(isolate,
102 base::Bind(mojo::Wait)));
125 templ->Set(gin::StringToSymbol(isolate, "waitMany"), 103 templ->Set(gin::StringToSymbol(isolate, "waitMany"),
126 gin::CreateFunctionTemplate(isolate, 104 gin::CreateFunctionTemplate(isolate,
127 base::Bind(mojo::WaitMany<std::vector<mojo::Handle>, 105 base::Bind(mojo::WaitMany<std::vector<mojo::Handle>,
128 std::vector<MojoWaitFlags> >))); 106 std::vector<MojoWaitFlags> >)));
129 templ->Set(gin::StringToSymbol(isolate, "createMessagePipe"), 107 templ->Set(gin::StringToSymbol(isolate, "createMessagePipe"),
130 v8::FunctionTemplate::New(CreateMessagePipe)); 108 gin::CreateFunctionTemplate(isolate,
109 base::Bind(CreateMessagePipe)));
131 templ->Set(gin::StringToSymbol(isolate, "writeMessage"), 110 templ->Set(gin::StringToSymbol(isolate, "writeMessage"),
132 v8::FunctionTemplate::New(WriteMessage)); 111 gin::CreateFunctionTemplate(isolate,
112 base::Bind(WriteMessage)));
133 templ->Set(gin::StringToSymbol(isolate, "readMessage"), 113 templ->Set(gin::StringToSymbol(isolate, "readMessage"),
134 v8::FunctionTemplate::New(ReadMessage)); 114 gin::CreateFunctionTemplate(isolate,
115 base::Bind(ReadMessage)));
abarth-chromium 2013/11/27 00:20:10 Nice!
135 116
136 // TODO(vtl): Change name of "kInvalidHandle", now that there's no such C++ 117 // TODO(vtl): Change name of "kInvalidHandle", now that there's no such C++
137 // constant? 118 // constant?
138 templ->Set(gin::StringToSymbol(isolate, "kInvalidHandle"), 119 templ->Set(gin::StringToSymbol(isolate, "kInvalidHandle"),
139 gin::ConvertToV8(isolate, mojo::Handle())); 120 gin::ConvertToV8(isolate, mojo::Handle()));
140 121
141 templ->Set(gin::StringToSymbol(isolate, "RESULT_OK"), 122 templ->Set(gin::StringToSymbol(isolate, "RESULT_OK"),
142 gin::ConvertToV8(isolate, MOJO_RESULT_OK)); 123 gin::ConvertToV8(isolate, MOJO_RESULT_OK));
143 templ->Set(gin::StringToSymbol(isolate, "RESULT_CANCELLED"), 124 templ->Set(gin::StringToSymbol(isolate, "RESULT_CANCELLED"),
144 gin::ConvertToV8(isolate, MOJO_RESULT_CANCELLED)); 125 gin::ConvertToV8(isolate, MOJO_RESULT_CANCELLED));
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 gin::ConvertToV8(isolate, MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 173 gin::ConvertToV8(isolate, MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
193 174
194 data->SetObjectTemplate(&g_wrapper_info, templ); 175 data->SetObjectTemplate(&g_wrapper_info, templ);
195 } 176 }
196 177
197 return templ; 178 return templ;
198 } 179 }
199 180
200 } // namespace js 181 } // namespace js
201 } // namespace mojo 182 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698