OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "mojo/shell/shell.h" | 5 #include "mojo/shell/shell.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
11 #include "base/bind.h" | 11 #include "base/bind.h" |
12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
13 #include "base/guid.h" | 13 #include "base/guid.h" |
14 #include "base/logging.h" | 14 #include "base/logging.h" |
15 #include "base/macros.h" | 15 #include "base/macros.h" |
16 #include "base/process/process.h" | 16 #include "base/process/process.h" |
17 #include "base/process/process_handle.h" | 17 #include "base/process/process_handle.h" |
18 #include "base/stl_util.h" | 18 #include "base/stl_util.h" |
19 #include "base/strings/string_util.h" | 19 #include "base/strings/string_util.h" |
20 #include "base/trace_event/trace_event.h" | 20 #include "base/trace_event/trace_event.h" |
21 #include "mojo/common/url_type_converters.h" | 21 #include "mojo/common/url_type_converters.h" |
22 #include "mojo/public/cpp/bindings/binding.h" | 22 #include "mojo/public/cpp/bindings/binding.h" |
23 #include "mojo/public/cpp/bindings/binding_set.h" | 23 #include "mojo/public/cpp/bindings/binding_set.h" |
24 #include "mojo/services/package_manager/loader.h" | 24 #include "mojo/services/catalog/loader.h" |
25 #include "mojo/shell/connect_util.h" | 25 #include "mojo/shell/connect_util.h" |
26 #include "mojo/shell/public/cpp/connect.h" | 26 #include "mojo/shell/public/cpp/connect.h" |
27 #include "mojo/shell/public/cpp/names.h" | 27 #include "mojo/shell/public/cpp/names.h" |
28 #include "mojo/shell/public/cpp/shell_connection.h" | 28 #include "mojo/shell/public/cpp/shell_connection.h" |
29 #include "mojo/shell/public/interfaces/connector.mojom.h" | 29 #include "mojo/shell/public/interfaces/connector.mojom.h" |
30 #include "mojo/shell/public/interfaces/shell.mojom.h" | 30 #include "mojo/shell/public/interfaces/shell.mojom.h" |
31 #include "mojo/shell/public/interfaces/shell_client.mojom.h" | 31 #include "mojo/shell/public/interfaces/shell_client.mojom.h" |
32 #include "mojo/util/filename_util.h" | 32 #include "mojo/util/filename_util.h" |
33 | 33 |
34 namespace mojo { | 34 namespace mojo { |
35 namespace shell { | 35 namespace shell { |
36 namespace { | 36 namespace { |
37 const char kPackageManagerName[] = "mojo:package_manager"; | 37 const char kCatalogName[] = "mojo:catalog"; |
38 | 38 |
39 void EmptyResolverCallback(const String& resolved_name, | 39 void EmptyResolverCallback(const String& resolved_name, |
40 const String& resolved_instance, | 40 const String& resolved_instance, |
41 mojom::CapabilityFilterPtr base_filter, | 41 mojom::CapabilityFilterPtr base_filter, |
42 const String& file_url) {} | 42 const String& file_url) {} |
43 | 43 |
44 } | 44 } |
45 | 45 |
46 Identity CreateShellIdentity() { | 46 Identity CreateShellIdentity() { |
47 return Identity("mojo:shell", mojom::kRootUserID); | 47 return Identity("mojo:shell", mojom::kRootUserID); |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 return true; | 318 return true; |
319 } | 319 } |
320 return false; | 320 return false; |
321 } | 321 } |
322 | 322 |
323 //////////////////////////////////////////////////////////////////////////////// | 323 //////////////////////////////////////////////////////////////////////////////// |
324 // Shell, public: | 324 // Shell, public: |
325 | 325 |
326 Shell::Shell(scoped_ptr<NativeRunnerFactory> native_runner_factory, | 326 Shell::Shell(scoped_ptr<NativeRunnerFactory> native_runner_factory, |
327 base::TaskRunner* file_task_runner, | 327 base::TaskRunner* file_task_runner, |
328 scoped_ptr<package_manager::ApplicationCatalogStore> app_catalog) | 328 scoped_ptr<catalog::Store> catalog_store) |
329 : file_task_runner_(file_task_runner), | 329 : file_task_runner_(file_task_runner), |
330 native_runner_factory_(std::move(native_runner_factory)), | 330 native_runner_factory_(std::move(native_runner_factory)), |
331 weak_ptr_factory_(this) { | 331 weak_ptr_factory_(this) { |
332 mojom::ShellClientRequest request; | 332 mojom::ShellClientRequest request; |
333 CreateInstance(CreateShellIdentity(), GetPermissiveCapabilityFilter(), | 333 CreateInstance(CreateShellIdentity(), GetPermissiveCapabilityFilter(), |
334 &request); | 334 &request); |
335 shell_connection_.reset(new ShellConnection(this, std::move(request))); | 335 shell_connection_.reset(new ShellConnection(this, std::move(request))); |
336 | 336 |
337 InitPackageManager(std::move(app_catalog)); | 337 InitCatalog(std::move(catalog_store)); |
338 } | 338 } |
339 | 339 |
340 Shell::~Shell() { | 340 Shell::~Shell() { |
341 TerminateShellConnections(); | 341 TerminateShellConnections(); |
342 STLDeleteValues(&name_to_loader_); | 342 STLDeleteValues(&name_to_loader_); |
343 for (auto& runner : native_runners_) | 343 for (auto& runner : native_runners_) |
344 runner.reset(); | 344 runner.reset(); |
345 } | 345 } |
346 | 346 |
347 void Shell::SetInstanceQuitCallback( | 347 void Shell::SetInstanceQuitCallback( |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
415 break; | 415 break; |
416 } | 416 } |
417 } | 417 } |
418 DCHECK(instance); | 418 DCHECK(instance); |
419 return instance->AcceptConnection(connection); | 419 return instance->AcceptConnection(connection); |
420 } | 420 } |
421 | 421 |
422 //////////////////////////////////////////////////////////////////////////////// | 422 //////////////////////////////////////////////////////////////////////////////// |
423 // Shell, private: | 423 // Shell, private: |
424 | 424 |
425 void Shell::InitPackageManager( | 425 void Shell::InitCatalog(scoped_ptr<catalog::Store> store) { |
426 scoped_ptr<package_manager::ApplicationCatalogStore> app_catalog) { | |
427 scoped_ptr<Loader> loader( | 426 scoped_ptr<Loader> loader( |
428 new package_manager::Loader(file_task_runner_, std::move(app_catalog))); | 427 new catalog::Loader(file_task_runner_, std::move(store))); |
429 Loader* loader_raw = loader.get(); | 428 Loader* loader_raw = loader.get(); |
430 std::string name = kPackageManagerName; | 429 std::string name = kCatalogName; |
431 SetLoaderForName(std::move(loader), name); | 430 SetLoaderForName(std::move(loader), name); |
432 | 431 |
433 mojom::ShellClientRequest request; | 432 mojom::ShellClientRequest request; |
434 // TODO(beng): Does the package manager actually have to be run with a | 433 // TODO(beng): Does the catalog actually have to be run with a permissive |
435 // permissive filter? | 434 // filter? |
436 Identity identity(name, mojom::kRootUserID); | 435 Identity identity(name, mojom::kRootUserID); |
437 CreateInstance(identity, GetPermissiveCapabilityFilter(), &request); | 436 CreateInstance(identity, GetPermissiveCapabilityFilter(), &request); |
438 loader_raw->Load(name, std::move(request)); | 437 loader_raw->Load(name, std::move(request)); |
439 | 438 |
440 ConnectToInterface(this, CreateShellIdentity(), name, &shell_resolver_); | 439 ConnectToInterface(this, CreateShellIdentity(), name, &shell_resolver_); |
441 | 440 |
442 // Seed the catalog with manifest info for the shell & package manager. | 441 // Seed the catalog with manifest info for the shell & catalog. |
443 if (file_task_runner_) { | 442 if (file_task_runner_) { |
444 shell_resolver_->ResolveMojoName(name, base::Bind(&EmptyResolverCallback)); | 443 shell_resolver_->ResolveMojoName(name, base::Bind(&EmptyResolverCallback)); |
445 shell_resolver_->ResolveMojoName("mojo:shell", | 444 shell_resolver_->ResolveMojoName("mojo:shell", |
446 base::Bind(&EmptyResolverCallback)); | 445 base::Bind(&EmptyResolverCallback)); |
447 } | 446 } |
448 } | 447 } |
449 | 448 |
450 void Shell::TerminateShellConnections() { | 449 void Shell::TerminateShellConnections() { |
451 STLDeleteValues(&identity_to_instance_); | 450 STLDeleteValues(&identity_to_instance_); |
452 } | 451 } |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
639 for (auto it = native_runners_.begin(); it != native_runners_.end(); ++it) { | 638 for (auto it = native_runners_.begin(); it != native_runners_.end(); ++it) { |
640 if (it->get() == runner) { | 639 if (it->get() == runner) { |
641 native_runners_.erase(it); | 640 native_runners_.erase(it); |
642 return; | 641 return; |
643 } | 642 } |
644 } | 643 } |
645 } | 644 } |
646 | 645 |
647 } // namespace shell | 646 } // namespace shell |
648 } // namespace mojo | 647 } // namespace mojo |
OLD | NEW |