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

Unified Diff: mojo/shell/application_manager.cc

Issue 1706063002: Eliminate ShellClientFactoryConnection & just have the ApplicationManager do it. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@factory
Patch Set: . Created 4 years, 10 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
« no previous file with comments | « mojo/shell/application_manager.h ('k') | mojo/shell/application_manager_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/shell/application_manager.cc
diff --git a/mojo/shell/application_manager.cc b/mojo/shell/application_manager.cc
index 3e0664dd3bac40a82f84b6090c07f8d6e2c3acfd..c5c7aa23f7591ddc0407040d9ff1737c79d94f8f 100644
--- a/mojo/shell/application_manager.cc
+++ b/mojo/shell/application_manager.cc
@@ -23,7 +23,6 @@
#include "mojo/shell/connect_util.h"
#include "mojo/shell/public/cpp/connect.h"
#include "mojo/shell/shell_application_loader.h"
-#include "mojo/shell/shell_client_factory_connection.h"
#include "mojo/shell/switches.h"
#include "mojo/util/filename_util.h"
@@ -35,8 +34,7 @@ namespace {
// Used by TestAPI.
bool has_created_instance = false;
-void OnEmptyOnConnectCallback(uint32_t remote_id,
- uint32_t shell_client_factory_id) {
+void OnEmptyOnConnectCallback(uint32_t remote_id) {
}
} // namespace
@@ -77,7 +75,8 @@ ApplicationManager::ApplicationManager(
SetLoaderForURL(make_scoped_ptr(new package_manager::Loader(
task_runner_, register_mojo_url_schemes)), package_manager_url);
- ConnectToInterface(this, package_manager_url, &shell_resolver_);
+ ConnectToInterface(this, CreateShellIdentity(), package_manager_url,
+ &shell_resolver_);
}
ApplicationManager::~ApplicationManager() {
@@ -219,9 +218,8 @@ ApplicationInstance* ApplicationManager::CreateInstance(
mojom::ShellClientPtr shell_client;
*request = GetProxy(&shell_client);
ApplicationInstance* instance = new ApplicationInstance(
- std::move(shell_client), this, target_id,
- mojom::Shell::kInvalidApplicationID, connect_callback,on_application_end,
- application_name);
+ std::move(shell_client), this, target_id, connect_callback,
+ on_application_end, application_name);
DCHECK(identity_to_instance_.find(target_id) ==
identity_to_instance_.end());
identity_to_instance_[target_id] = instance;
@@ -235,41 +233,41 @@ ApplicationInstance* ApplicationManager::CreateInstance(
return instance;
}
-uint32_t ApplicationManager::StartShellClientFactory(
+void ApplicationManager::CreateShellClient(
const Identity& source,
const Identity& shell_client_factory,
const GURL& url,
mojom::ShellClientRequest request) {
- ShellClientFactoryConnection* connection =
+ mojom::ShellClientFactory* factory =
GetShellClientFactory(shell_client_factory, source);
- connection->CreateShellClient(std::move(request), url);
- return connection->id();
+ factory->CreateShellClient(std::move(request), url.spec());
}
-ShellClientFactoryConnection* ApplicationManager::GetShellClientFactory(
+mojom::ShellClientFactory* ApplicationManager::GetShellClientFactory(
const Identity& shell_client_factory_identity,
const Identity& source_identity) {
- auto it = identity_to_shell_client_factory_.find(
- shell_client_factory_identity);
- if (it != identity_to_shell_client_factory_.end())
- return it->second;
-
- ShellClientFactoryConnection* connection = new ShellClientFactoryConnection(
- this, source_identity,
- shell_client_factory_identity,
- ++shell_client_factory_id_counter_,
- base::Bind(&ApplicationManager::OnShellClientFactoryConnectionClosed,
- weak_ptr_factory_.GetWeakPtr()));
- identity_to_shell_client_factory_[shell_client_factory_identity] = connection;
- return connection;
+ auto it = shell_client_factories_.find(shell_client_factory_identity);
+ if (it != shell_client_factories_.end())
+ return it->second.get();
+
+ mojom::ShellClientFactoryPtr factory;
+ // TODO(beng): we should forward the original source identity!
+ ConnectToInterface(this, source_identity, shell_client_factory_identity.url(),
+ &factory);
+ mojom::ShellClientFactory* factory_interface = factory.get();
+ factory.set_connection_error_handler(
+ base::Bind(&ApplicationManager::OnShellClientFactoryLost,
+ weak_ptr_factory_.GetWeakPtr(),
+ shell_client_factory_identity));
+ shell_client_factories_[shell_client_factory_identity] = std::move(factory);
+ return factory_interface;
}
-void ApplicationManager::OnShellClientFactoryConnectionClosed(
- ShellClientFactoryConnection* connection) {
+void ApplicationManager::OnShellClientFactoryLost(const Identity& which) {
// Remove the mapping.
- auto it = identity_to_shell_client_factory_.find(connection->identity());
- DCHECK(it != identity_to_shell_client_factory_.end());
- identity_to_shell_client_factory_.erase(it);
+ auto it = shell_client_factories_.find(which);
+ DCHECK(it != shell_client_factories_.end());
+ shell_client_factories_.erase(it);
}
void ApplicationManager::OnGotResolvedURL(
@@ -298,12 +296,8 @@ void ApplicationManager::OnGotResolvedURL(
mojom::ShellClientRequest request;
ApplicationInstance* instance = CreateAndConnectToInstance(
std::move(params), &source, &target, application_name, &request);
-
- uint32_t shell_client_factory_id = StartShellClientFactory(
- source, Identity(resolved_gurl, target.qualifier(), capability_filter),
- target.url(), std::move(request));
- CHECK(shell_client_factory_id != mojom::Shell::kInvalidApplicationID);
- instance->set_requesting_shell_client_factory_id(shell_client_factory_id);
+ CreateShellClient(source, Identity(resolved_gurl, target.qualifier(),
+ capability_filter), target.url(), std::move(request));
instance->RunConnectCallback();
return;
}
« no previous file with comments | « mojo/shell/application_manager.h ('k') | mojo/shell/application_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698