OLD | NEW |
---|---|
(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 #include "gin/test/file.h" | |
6 | |
7 #include <iostream> | |
8 | |
9 #include "base/bind.h" | |
10 #include "base/file_util.h" | |
11 #include "base/files/file_enumerator.h" | |
12 #include "base/files/file_path.h" | |
13 #include "base/path_service.h" | |
14 #include "gin/arguments.h" | |
15 #include "gin/converter.h" | |
16 #include "gin/object_template_builder.h" | |
17 #include "gin/per_isolate_data.h" | |
18 #include "gin/public/wrapper_info.h" | |
19 | |
20 using v8::ObjectTemplate; | |
21 | |
22 namespace gin { | |
23 | |
24 namespace { | |
25 | |
26 v8::Handle<v8::Value> ReadFileToString(gin::Arguments* args) { | |
27 std::string filename; | |
28 if (!args->GetNext(&filename)) | |
29 return v8::Null(args->isolate()); | |
30 | |
31 const base::FilePath& path = base::FilePath::FromUTF8Unsafe(filename); | |
32 std::string contents; | |
33 if (!ReadFileToString(path, &contents)) | |
34 return v8::Null(args->isolate()); | |
35 | |
36 return gin::Converter<std::string>::ToV8(args->isolate(), contents); | |
abarth-chromium
2014/07/29 16:47:04
We should use a type like base::NullableString16 i
hansmuller
2014/07/29 17:16:25
That sounds sensible. I will do that in a separate
| |
37 } | |
38 | |
39 v8::Handle<v8::Value> GetSourceRootDirectory(gin::Arguments* args) { | |
40 base::FilePath path; | |
41 if (!PathService::Get(base::DIR_SOURCE_ROOT, &path)) | |
42 return v8::Null(args->isolate()); | |
43 return gin::Converter<std::string>::ToV8(args->isolate(), | |
44 path.AsUTF8Unsafe()); | |
45 } | |
46 | |
47 v8::Handle<v8::Value> GetFilesInDirectory(gin::Arguments* args) { | |
48 std::string filename; | |
49 if (!args->GetNext(&filename)) | |
50 return v8::Null(args->isolate()); | |
51 | |
52 const base::FilePath& path = base::FilePath::FromUTF8Unsafe(filename); | |
53 if (!base::DirectoryExists(path)) | |
54 return v8::Null(args->isolate()); | |
55 | |
56 std::vector<std::string> names; | |
57 base::FileEnumerator e(path, false, base::FileEnumerator::FILES); | |
58 for (base::FilePath name = e.Next(); !name.empty(); name = e.Next()) { | |
59 names.push_back(name.BaseName().AsUTF8Unsafe()); | |
60 } | |
61 | |
62 return gin::Converter<std::vector<std::string>>::ToV8(args->isolate(), names); | |
63 } | |
64 | |
65 gin::WrapperInfo g_wrapper_info = { gin::kEmbedderNativeGin }; | |
66 | |
67 } // namespace | |
68 | |
69 const char File::kModuleName[] = "file"; | |
70 | |
71 v8::Local<v8::Value> File::GetModule(v8::Isolate* isolate) { | |
72 gin::PerIsolateData* data = gin::PerIsolateData::From(isolate); | |
73 v8::Local<ObjectTemplate> templ = data->GetObjectTemplate(&g_wrapper_info); | |
74 if (templ.IsEmpty()) { | |
75 templ = gin::ObjectTemplateBuilder(isolate) | |
76 .SetMethod("readFileToString", ReadFileToString) | |
77 .SetMethod("getFilesInDirectory", GetFilesInDirectory) | |
78 .SetMethod("getSourceRootDirectory", GetSourceRootDirectory) | |
79 .Build(); | |
80 data->SetObjectTemplate(&g_wrapper_info, templ); | |
81 } | |
82 return templ->NewInstance(); | |
83 } | |
84 | |
85 } // namespace gin | |
OLD | NEW |