// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "components/resource_provider/resource_provider_impl.h" #include #include #include "base/bind.h" #include "base/files/file_util.h" #include "base/location.h" #include "base/logging.h" #include "components/resource_provider/file_utils.h" #include "mojo/platform_handle/platform_handle_functions.h" #include "url/gurl.h" using mojo::ScopedHandle; namespace resource_provider { namespace { ScopedHandle GetHandleForPath(const base::FilePath& path) { if (path.empty()) return ScopedHandle(); ScopedHandle to_pass; base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ); if (!file.IsValid()) { LOG(WARNING) << "file not valid, path=" << path.value(); return ScopedHandle(); } MojoHandle mojo_handle; MojoResult create_result = MojoCreatePlatformHandleWrapper(file.TakePlatformFile(), &mojo_handle); if (create_result != MOJO_RESULT_OK) { LOG(WARNING) << "unable to create wrapper, path=" << path.value() << "result=" << create_result; return ScopedHandle(); } return ScopedHandle(mojo::Handle(mojo_handle)); } } // namespace ResourceProviderImpl::ResourceProviderImpl( const base::FilePath& application_path, const std::string& resource_provider_app_url) : application_path_(application_path), resource_provider_app_url_(resource_provider_app_url) { CHECK(!application_path_.empty()); } ResourceProviderImpl::~ResourceProviderImpl() { } void ResourceProviderImpl::GetResources(mojo::Array paths, const GetResourcesCallback& callback) { mojo::Array handles; if (!paths.is_null()) { handles.resize(paths.size()); for (size_t i = 0; i < paths.size(); ++i) { handles[i] = GetHandleForPath( GetPathForResourceNamed(application_path_, paths[i])); } } callback.Run(std::move(handles)); } } // namespace resource_provider