| Index: mojo/shell/application_manager.cc
|
| diff --git a/mojo/shell/application_manager.cc b/mojo/shell/application_manager.cc
|
| index 0ed616002feddf295972fdc456886eb9c728223f..aaae40a66c78c04d29c90e99db3732e8d2ab7b14 100644
|
| --- a/mojo/shell/application_manager.cc
|
| +++ b/mojo/shell/application_manager.cc
|
| @@ -29,29 +29,6 @@
|
| namespace mojo {
|
| namespace shell {
|
|
|
| -namespace {
|
| -
|
| -class ShellApplicationLoader : public ApplicationLoader {
|
| - public:
|
| - explicit ShellApplicationLoader(ApplicationManager* manager)
|
| - : manager_(manager) {}
|
| - ~ShellApplicationLoader() override {}
|
| -
|
| - private:
|
| - // Overridden from ApplicationLoader:
|
| - void Load(const GURL& url, mojom::ShellClientRequest request) override {
|
| - DCHECK(request.is_pending());
|
| - shell_connection_.reset(new ShellConnection(manager_, std::move(request)));
|
| - }
|
| -
|
| - ApplicationManager* manager_;
|
| - scoped_ptr<ShellConnection> shell_connection_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ShellApplicationLoader);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| // static
|
| ApplicationManager::TestAPI::TestAPI(ApplicationManager* manager)
|
| : manager_(manager) {
|
| @@ -79,8 +56,9 @@ ApplicationManager::ApplicationManager(
|
| : task_runner_(task_runner),
|
| native_runner_factory_(std::move(native_runner_factory)),
|
| weak_ptr_factory_(this) {
|
| - SetLoaderForURL(make_scoped_ptr(new ShellApplicationLoader(this)),
|
| - GURL("mojo://shell/"));
|
| + mojom::ShellClientRequest request;
|
| + CreateInstance(CreateShellIdentity(), &request);
|
| + shell_connection_.reset(new ShellConnection(this, std::move(request)));
|
|
|
| InitPackageManager(register_mojo_url_schemes);
|
| }
|
| @@ -103,6 +81,15 @@ void ApplicationManager::Connect(scoped_ptr<ConnectParams> params) {
|
| params->target().url().spec());
|
| DCHECK(params->target().url().is_valid());
|
|
|
| + if (params->target().user_id() == mojom::Shell::kUserInherit) {
|
| + ApplicationInstance* source = GetApplicationInstance(params->source());
|
| + Identity target = params->target();
|
| + // TODO(beng): we should CHECK source.
|
| + target.set_user_id(source ? source->identity().user_id()
|
| + : mojom::Shell::kUserRoot);
|
| + params->set_target(target);
|
| + }
|
| +
|
| // Connect to an existing matching instance, if possible.
|
| if (ConnectToExistingInstance(¶ms))
|
| return;
|
| @@ -194,7 +181,9 @@ void ApplicationManager::CreateInstanceForHandle(
|
| // created instance is identified by |url| and may be subsequently reached by
|
| // client code using this identity.
|
| CapabilityFilter local_filter = filter->filter.To<CapabilityFilter>();
|
| - Identity target_id(url.To<GURL>(), std::string(), local_filter);
|
| + // TODO(beng): obtain userid from the inbound connection.
|
| + Identity target_id(url.To<GURL>(), std::string(), mojom::Shell::kUserInherit,
|
| + local_filter);
|
| mojom::ShellClientRequest request;
|
| ApplicationInstance* instance = CreateInstance(target_id, &request);
|
| instance->BindPIDReceiver(std::move(pid_receiver));
|
| @@ -235,8 +224,12 @@ void ApplicationManager::InitPackageManager(bool register_mojo_url_schemes) {
|
| bool ApplicationManager::ConnectToExistingInstance(
|
| scoped_ptr<ConnectParams>* params) {
|
| ApplicationInstance* instance = GetApplicationInstance((*params)->target());
|
| - if (!instance)
|
| - return false;
|
| + if (!instance) {
|
| + Identity root_identity = (*params)->target();
|
| + root_identity.set_user_id(mojom::Shell::kUserRoot);
|
| + instance = GetApplicationInstance(root_identity);
|
| + if (!instance) return false;
|
| + }
|
| instance->ConnectToClient(std::move(*params));
|
| return true;
|
| }
|
| @@ -315,7 +308,8 @@ void ApplicationManager::OnGotResolvedURL(
|
| // TODO(beng): this clobbers the filter passed via Connect().
|
| if (!base_filter.is_null())
|
| filter = base_filter->filter.To<CapabilityFilter>();
|
| - Identity target(params->target().url(), params->target().qualifier(), filter);
|
| + Identity target(params->target().url(), params->target().qualifier(),
|
| + params->target().user_id(), filter);
|
|
|
| mojom::ShellClientRequest request;
|
| ApplicationInstance* instance = CreateInstance(target, &request);
|
| @@ -332,7 +326,8 @@ void ApplicationManager::OnGotResolvedURL(
|
| // from the original request rather than for the package itself, which will
|
| // always be the same.
|
| CreateShellClient(source,
|
| - Identity(resolved_gurl, target.qualifier(), filter),
|
| + Identity(resolved_gurl, target.qualifier(),
|
| + target.user_id(), filter),
|
| target.url(), std::move(request));
|
| } else {
|
| bool start_sandboxed = false;
|
|
|