15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "gin/test/file.h" 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <iostream> 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/bind.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/files/file_enumerator.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/files/file_path.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/path_service.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "gin/arguments.h" 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "gin/converter.h" 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "gin/object_template_builder.h" 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "gin/per_isolate_data.h" 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "gin/public/wrapper_info.h" 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)using v8::ObjectTemplate; 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace gin { 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace { 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)v8::Handle<v8::Value> ReadFileToString(gin::Arguments* args) { 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string filename; 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!args->GetNext(&filename)) 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return v8::Null(args->isolate()); 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const base::FilePath& path = base::FilePath::FromUTF8Unsafe(filename); 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string contents; 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!ReadFileToString(path, &contents)) 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return v8::Null(args->isolate()); 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return gin::Converter<std::string>::ToV8(args->isolate(), contents); 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)v8::Handle<v8::Value> GetSourceRootDirectory(gin::Arguments* args) { 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::FilePath path; 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!PathService::Get(base::DIR_SOURCE_ROOT, &path)) 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return v8::Null(args->isolate()); 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return gin::Converter<std::string>::ToV8(args->isolate(), 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) path.AsUTF8Unsafe()); 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)v8::Handle<v8::Value> GetFilesInDirectory(gin::Arguments* args) { 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string filename; 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!args->GetNext(&filename)) 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return v8::Null(args->isolate()); 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const base::FilePath& path = base::FilePath::FromUTF8Unsafe(filename); 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!base::DirectoryExists(path)) 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return v8::Null(args->isolate()); 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::vector<std::string> names; 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::FileEnumerator e(path, false, base::FileEnumerator::FILES); 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (base::FilePath name = e.Next(); !name.empty(); name = e.Next()) { 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) names.push_back(name.BaseName().AsUTF8Unsafe()); 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return gin::Converter<std::vector<std::string> >::ToV8(args->isolate(), 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) names); 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)gin::WrapperInfo g_wrapper_info = { gin::kEmbedderNativeGin }; 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const char File::kModuleName[] = "file"; 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)v8::Local<v8::Value> File::GetModule(v8::Isolate* isolate) { 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gin::PerIsolateData* data = gin::PerIsolateData::From(isolate); 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) v8::Local<ObjectTemplate> templ = data->GetObjectTemplate(&g_wrapper_info); 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (templ.IsEmpty()) { 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) templ = gin::ObjectTemplateBuilder(isolate) 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) .SetMethod("readFileToString", ReadFileToString) 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) .SetMethod("getFilesInDirectory", GetFilesInDirectory) 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) .SetMethod("getSourceRootDirectory", GetSourceRootDirectory) 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) .Build(); 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data->SetObjectTemplate(&g_wrapper_info, templ); 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return templ->NewInstance(); 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace gin 87