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

Unified Diff: components/resource_provider/public/cpp/resource_loader.cc

Issue 1132083003: Makes ResourceLoader own handles and return Files (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comment Created 5 years, 7 months 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 side-by-side diff with in-line comments
Download patch
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;
}
« no previous file with comments | « components/resource_provider/public/cpp/resource_loader.h ('k') | components/resource_provider/resource_provider_apptest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698