| Index: components/resource_provider/public/cpp/resource_loader.cc
|
| diff --git a/components/resource_provider/public/cpp/resource_loader.cc b/components/resource_provider/public/cpp/resource_loader.cc
|
| index 3baf4a979e97fde6235e469c3c1646de1c5ce984..a387e20d3c140818699d9b3deebd20fd3048d5ac 100644
|
| --- a/components/resource_provider/public/cpp/resource_loader.cc
|
| +++ b/components/resource_provider/public/cpp/resource_loader.cc
|
| @@ -5,6 +5,7 @@
|
| #include "components/resource_provider/public/cpp/resource_loader.h"
|
|
|
| #include "base/bind.h"
|
| +#include "base/files/file.h"
|
| #include "mojo/common/common_type_converters.h"
|
| #include "mojo/platform_handle/platform_handle_functions.h"
|
| #include "third_party/mojo/src/mojo/public/cpp/application/connect.h"
|
| @@ -14,7 +15,7 @@ namespace resource_provider {
|
|
|
| ResourceLoader::ResourceLoader(mojo::Shell* shell,
|
| const std::set<std::string>& paths)
|
| - : loaded_(false) {
|
| + : loaded_(false), did_block_(false) {
|
| shell->ConnectToApplication("mojo:resource_provider",
|
| GetProxy(&resource_provider_service_provider_),
|
| nullptr);
|
| @@ -31,11 +32,21 @@ ResourceLoader::~ResourceLoader() {
|
| }
|
|
|
| bool ResourceLoader::BlockUntilLoaded() {
|
| - CHECK(!loaded_);
|
| + if (did_block_)
|
| + return loaded_;
|
| +
|
| + did_block_ = true;
|
| resource_provider_.WaitForIncomingMethodCall();
|
| return loaded_;
|
| }
|
|
|
| +base::File ResourceLoader::ReleaseFile(const std::string& path) {
|
| + CHECK(resource_map_.count(path));
|
| + scoped_ptr<base::File> file_wrapper(resource_map_[path].Pass());
|
| + resource_map_.erase(path);
|
| + return file_wrapper->Pass();
|
| +}
|
| +
|
| void ResourceLoader::OnGotResources(const std::vector<std::string>& paths,
|
| mojo::Array<mojo::ScopedHandle> resources) {
|
| // We no longer need the connection to ResourceProvider.
|
| @@ -49,7 +60,7 @@ void ResourceLoader::OnGotResources(const std::vector<std::string>& paths,
|
| MojoPlatformHandle platform_handle;
|
| CHECK(MojoExtractPlatformHandle(resources[i].release().value(),
|
| &platform_handle) == MOJO_RESULT_OK);
|
| - resource_map_[paths[i]] = platform_handle;
|
| + resource_map_[paths[i]].reset(new base::File(platform_handle));
|
| }
|
| loaded_ = true;
|
| }
|
|
|