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

Side by Side Diff: components/resource_provider/public/cpp/resource_loader.cc

Issue 1942473002: Eliminate mojo:resource_provider (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 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 "components/resource_provider/public/cpp/resource_loader.h"
6
7 #include <stddef.h>
8 #include <utility>
9
10 #include "base/bind.h"
11 #include "base/files/file.h"
12 #include "mojo/common/common_type_converters.h"
13 #include "mojo/platform_handle/platform_handle_functions.h"
14 #include "services/shell/public/cpp/connector.h"
15 #include "services/shell/public/interfaces/connector.mojom.h"
16 #include "services/shell/public/interfaces/interface_provider.mojom.h"
17
18 namespace resource_provider {
19 namespace {
20 base::File GetFileFromHandle(mojo::ScopedHandle handle) {
21 CHECK(handle.is_valid());
22 MojoPlatformHandle platform_handle;
23 CHECK(MojoExtractPlatformHandle(handle.release().value(),
24 &platform_handle) == MOJO_RESULT_OK);
25 return base::File(platform_handle);
26 }
27 }
28
29 ResourceLoader::ResourceLoader(shell::Connector* connector,
30 const std::set<std::string>& paths)
31 : loaded_(false), did_block_(false) {
32 connector->ConnectToInterface("mojo:resource_provider", &resource_provider_);
33 std::vector<std::string> paths_vector(paths.begin(), paths.end());
34 resource_provider_->GetResources(
35 mojo::Array<mojo::String>::From(paths_vector),
36 base::Bind(&ResourceLoader::OnGotResources, base::Unretained(this),
37 paths_vector));
38 }
39
40 ResourceLoader::~ResourceLoader() {
41 }
42
43 bool ResourceLoader::BlockUntilLoaded() {
44 if (did_block_ || loaded_)
45 return loaded_;
46
47 did_block_ = true;
48 resource_provider_.WaitForIncomingResponse();
49 return loaded_;
50 }
51
52 base::File ResourceLoader::ReleaseFile(const std::string& path) {
53 CHECK(resource_map_.count(path));
54 std::unique_ptr<base::File> file_wrapper(std::move(resource_map_[path]));
55 resource_map_.erase(path);
56 return std::move(*file_wrapper);
57 }
58
59 void ResourceLoader::OnGotResources(const std::vector<std::string>& paths,
60 mojo::Array<mojo::ScopedHandle> resources) {
61
62 CHECK(!resources.is_null());
63 CHECK_EQ(resources.size(), paths.size());
64 for (size_t i = 0; i < resources.size(); ++i) {
65 resource_map_[paths[i]].reset(
66 new base::File(GetFileFromHandle(std::move(resources[i]))));
67 }
68 loaded_ = true;
69 }
70
71 } // namespace resource_provider
OLDNEW
« no previous file with comments | « components/resource_provider/public/cpp/resource_loader.h ('k') | components/resource_provider/public/interfaces/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698