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

Side by Side Diff: mojo/shell/shell.cc

Issue 1828803002: Simplify resolve. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@61catalog
Patch Set: . Created 4 years, 9 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
« no previous file with comments | « mojo/shell/shell.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
(...skipping 23 matching lines...) Expand all
34 namespace mojo { 34 namespace mojo {
35 namespace shell { 35 namespace shell {
36 namespace { 36 namespace {
37 const char kCatalogName[] = "mojo:catalog"; 37 const char kCatalogName[] = "mojo:catalog";
38 const char kShellName[] = "mojo:shell"; 38 const char kShellName[] = "mojo:shell";
39 const char kCapabilityClass_UserID[] = "user_id"; 39 const char kCapabilityClass_UserID[] = "user_id";
40 const char kCapabilityClass_ClientProcess[] = "client_process"; 40 const char kCapabilityClass_ClientProcess[] = "client_process";
41 const char kCapabilityClass_InstanceName[] = "instance_name"; 41 const char kCapabilityClass_InstanceName[] = "instance_name";
42 const char kCapabilityClass_AllUsers[] = "all_users"; 42 const char kCapabilityClass_AllUsers[] = "all_users";
43 43
44 void EmptyResolverCallback(const String& resolved_name, 44 void EmptyResolverCallback(mojom::ResolveResultPtr result) {}
45 const String& resolved_instance,
46 mojom::CapabilitySpecPtr capabilities,
47 const String& file_url) {}
48 45
49 } 46 }
50 47
51 Identity CreateShellIdentity() { 48 Identity CreateShellIdentity() {
52 return Identity(kShellName, mojom::kRootUserID); 49 return Identity(kShellName, mojom::kRootUserID);
53 } 50 }
54 51
55 Identity CreateCatalogIdentity() { 52 Identity CreateCatalogIdentity() {
56 return Identity(kCatalogName, mojom::kRootUserID); 53 return Identity(kCatalogName, mojom::kRootUserID);
57 } 54 }
(...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 void Shell::OnShellClientFactoryLost(const Identity& which) { 673 void Shell::OnShellClientFactoryLost(const Identity& which) {
677 // Remove the mapping. 674 // Remove the mapping.
678 auto it = shell_client_factories_.find(which); 675 auto it = shell_client_factories_.find(which);
679 DCHECK(it != shell_client_factories_.end()); 676 DCHECK(it != shell_client_factories_.end());
680 shell_client_factories_.erase(it); 677 shell_client_factories_.erase(it);
681 } 678 }
682 679
683 void Shell::OnGotResolvedName(mojom::ShellResolverPtr resolver, 680 void Shell::OnGotResolvedName(mojom::ShellResolverPtr resolver,
684 scoped_ptr<ConnectParams> params, 681 scoped_ptr<ConnectParams> params,
685 mojom::ShellClientPtr client, 682 mojom::ShellClientPtr client,
686 const String& resolved_name, 683 mojom::ResolveResultPtr result) {
687 const String& resolved_instance,
688 mojom::CapabilitySpecPtr capabilities_ptr,
689 const String& file_url) {
690 std::string instance_name = params->target().instance(); 684 std::string instance_name = params->target().instance();
691 if (instance_name == GetNamePath(params->target().name()) && 685 if (instance_name == GetNamePath(params->target().name()) &&
692 resolved_instance != GetNamePath(resolved_name)) { 686 result->qualifier != GetNamePath(result->resolved_name)) {
693 instance_name = resolved_instance; 687 instance_name = result->qualifier;
694 } 688 }
695 Identity target(params->target().name(), params->target().user_id(), 689 Identity target(params->target().name(), params->target().user_id(),
696 instance_name); 690 instance_name);
697 params->set_target(target); 691 params->set_target(target);
698 692
699 // It's possible that when this manifest request was issued, another one was 693 // It's possible that when this manifest request was issued, another one was
700 // already in-progress and completed by the time this one did, and so the 694 // already in-progress and completed by the time this one did, and so the
701 // requested application may already be running. 695 // requested application may already be running.
702 if (ConnectToExistingInstance(&params)) 696 if (ConnectToExistingInstance(&params))
703 return; 697 return;
704 698
705 Identity source = params->source(); 699 Identity source = params->source();
706 // |capabilities_ptr| can be null when there is no manifest, e.g. for URL 700 // |capabilities_ptr| can be null when there is no manifest, e.g. for URL
707 // types not resolvable by the resolver. 701 // types not resolvable by the resolver.
708 CapabilitySpec capabilities = GetPermissiveCapabilities(); 702 CapabilitySpec capabilities = GetPermissiveCapabilities();
709 if (!capabilities_ptr.is_null()) 703 if (!result->capabilities.is_null())
710 capabilities = capabilities_ptr.To<CapabilitySpec>(); 704 capabilities = result->capabilities.To<CapabilitySpec>();
711 705
712 // Clients that request "all_users" class from the shell are allowed to 706 // Clients that request "all_users" class from the shell are allowed to
713 // field connection requests from any user. They also run with a synthetic 707 // field connection requests from any user. They also run with a synthetic
714 // user id generated here. The user id provided via Connect() is ignored. 708 // user id generated here. The user id provided via Connect() is ignored.
715 // Additionally apps with the "all_users" class are not tied to the lifetime 709 // Additionally apps with the "all_users" class are not tied to the lifetime
716 // of the app that connected to them, instead they are owned by the shell. 710 // of the app that connected to them, instead they are owned by the shell.
717 Identity source_identity_for_creation; 711 Identity source_identity_for_creation;
718 if (HasClass(capabilities, kCapabilityClass_AllUsers)) { 712 if (HasClass(capabilities, kCapabilityClass_AllUsers)) {
719 singletons_.insert(target.name()); 713 singletons_.insert(target.name());
720 target.set_user_id(base::GenerateGUID()); 714 target.set_user_id(base::GenerateGUID());
(...skipping 17 matching lines...) Expand all
738 // Likewise if a ClientProcessConnection was given via Connect(), it 732 // Likewise if a ClientProcessConnection was given via Connect(), it
739 // provides the ShellClient proxy to use. 733 // provides the ShellClient proxy to use.
740 instance->StartWithClientProcessConnection( 734 instance->StartWithClientProcessConnection(
741 std::move(client_process_connection)); 735 std::move(client_process_connection));
742 } else { 736 } else {
743 // Otherwise we create a new ShellClient pipe. 737 // Otherwise we create a new ShellClient pipe.
744 mojom::ShellClientRequest request = GetProxy(&client); 738 mojom::ShellClientRequest request = GetProxy(&client);
745 if (LoadWithLoader(target, &request)) { 739 if (LoadWithLoader(target, &request)) {
746 instance->StartWithClient(std::move(client)); 740 instance->StartWithClient(std::move(client));
747 } else { 741 } else {
748 CHECK(!file_url.is_null() && !capabilities_ptr.is_null()); 742 CHECK(!result->package_url.is_null() && !result->capabilities.is_null());
749 743
750 if (target.name() != resolved_name) { 744 if (target.name() != result->resolved_name) {
751 instance->StartWithClient(std::move(client)); 745 instance->StartWithClient(std::move(client));
752 CreateShellClientWithFactory( 746 Identity factory(result->resolved_name, target.user_id(),
753 source, Identity(resolved_name, target.user_id(), instance_name), 747 instance_name);
754 target.name(), std::move(request)); 748 CreateShellClientWithFactory(source, factory, target.name(),
749 std::move(request));
755 } else { 750 } else {
756 instance->StartWithFilePath(util::UrlToFilePath(file_url.To<GURL>())); 751 instance->StartWithFilePath(
752 util::UrlToFilePath(result->package_url.To<GURL>()));
757 } 753 }
758 } 754 }
759 } 755 }
760 756
761 // Now that the instance has a ShellClient, we can connect to it. 757 // Now that the instance has a ShellClient, we can connect to it.
762 instance->ConnectToClient(std::move(params)); 758 instance->ConnectToClient(std::move(params));
763 } 759 }
764 760
765 bool Shell::LoadWithLoader(const Identity& target, 761 bool Shell::LoadWithLoader(const Identity& target,
766 mojom::ShellClientRequest* request) { 762 mojom::ShellClientRequest* request) {
(...skipping 19 matching lines...) Expand all
786 for (auto it = native_runners_.begin(); it != native_runners_.end(); ++it) { 782 for (auto it = native_runners_.begin(); it != native_runners_.end(); ++it) {
787 if (it->get() == runner) { 783 if (it->get() == runner) {
788 native_runners_.erase(it); 784 native_runners_.erase(it);
789 return; 785 return;
790 } 786 }
791 } 787 }
792 } 788 }
793 789
794 } // namespace shell 790 } // namespace shell
795 } // namespace mojo 791 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/shell/shell.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698