Move components\profile_service to services\user
R=erg@chromium.org BUG= Review URL: https://codereview.chromium.org/1879233002 Cr-Commit-Position: refs/heads/master@{#387125}
This commit is contained in:
components/profile_service
content
services/user
@@ -1,127 +0,0 @@
|
|||||||
// Copyright 2016 The Chromium Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
#include "components/profile_service/profile_app.h"
|
|
||||||
|
|
||||||
#include "base/bind.h"
|
|
||||||
#include "base/memory/weak_ptr.h"
|
|
||||||
#include "components/filesystem/lock_table.h"
|
|
||||||
#include "components/leveldb/leveldb_service_impl.h"
|
|
||||||
#include "components/profile_service/profile_service_impl.h"
|
|
||||||
#include "components/profile_service/user_id_map.h"
|
|
||||||
#include "mojo/public/cpp/bindings/callback.h"
|
|
||||||
#include "services/shell/public/cpp/connection.h"
|
|
||||||
|
|
||||||
namespace profile {
|
|
||||||
|
|
||||||
class ProfileApp::ProfileServiceObjects
|
|
||||||
: public base::SupportsWeakPtr<ProfileServiceObjects> {
|
|
||||||
public:
|
|
||||||
// Created on the main thread.
|
|
||||||
ProfileServiceObjects(base::FilePath profile_data_dir)
|
|
||||||
: profile_data_dir_(profile_data_dir) {}
|
|
||||||
|
|
||||||
// Destroyed on the |profile_service_runner_|.
|
|
||||||
~ProfileServiceObjects() {}
|
|
||||||
|
|
||||||
// Called on the |profile_service_runner_|.
|
|
||||||
void OnProfileServiceRequest(mojo::Connection* connection,
|
|
||||||
ProfileServiceRequest request) {
|
|
||||||
if (!lock_table_)
|
|
||||||
lock_table_ = new filesystem::LockTable;
|
|
||||||
profile_service_bindings_.AddBinding(
|
|
||||||
new ProfileServiceImpl(profile_data_dir_, lock_table_),
|
|
||||||
std::move(request));
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
mojo::BindingSet<ProfileService> profile_service_bindings_;
|
|
||||||
scoped_refptr<filesystem::LockTable> lock_table_;
|
|
||||||
base::FilePath profile_data_dir_;
|
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(ProfileServiceObjects);
|
|
||||||
};
|
|
||||||
|
|
||||||
class ProfileApp::LevelDBServiceObjects
|
|
||||||
: public base::SupportsWeakPtr<LevelDBServiceObjects> {
|
|
||||||
public:
|
|
||||||
// Created on the main thread.
|
|
||||||
LevelDBServiceObjects(scoped_refptr<base::SingleThreadTaskRunner> task_runner)
|
|
||||||
: task_runner_(std::move(task_runner)) {}
|
|
||||||
|
|
||||||
// Destroyed on the |leveldb_service_runner_|.
|
|
||||||
~LevelDBServiceObjects() {}
|
|
||||||
|
|
||||||
// Called on the |leveldb_service_runner_|.
|
|
||||||
void OnLevelDBServiceRequest(mojo::Connection* connection,
|
|
||||||
leveldb::LevelDBServiceRequest request) {
|
|
||||||
if (!leveldb_service_)
|
|
||||||
leveldb_service_.reset(new leveldb::LevelDBServiceImpl(task_runner_));
|
|
||||||
leveldb_bindings_.AddBinding(leveldb_service_.get(), std::move(request));
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
|
|
||||||
|
|
||||||
// Variables that are only accessible on the |leveldb_service_runner_| thread.
|
|
||||||
scoped_ptr<leveldb::LevelDBService> leveldb_service_;
|
|
||||||
mojo::BindingSet<leveldb::LevelDBService> leveldb_bindings_;
|
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(LevelDBServiceObjects);
|
|
||||||
};
|
|
||||||
|
|
||||||
scoped_ptr<mojo::ShellClient> CreateProfileApp(
|
|
||||||
scoped_refptr<base::SingleThreadTaskRunner> profile_service_runner,
|
|
||||||
scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner) {
|
|
||||||
return make_scoped_ptr(new ProfileApp(
|
|
||||||
std::move(profile_service_runner),
|
|
||||||
std::move(leveldb_service_runner)));
|
|
||||||
}
|
|
||||||
|
|
||||||
ProfileApp::ProfileApp(
|
|
||||||
scoped_refptr<base::SingleThreadTaskRunner> profile_service_runner,
|
|
||||||
scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner)
|
|
||||||
: profile_service_runner_(std::move(profile_service_runner)),
|
|
||||||
leveldb_service_runner_(std::move(leveldb_service_runner)) {}
|
|
||||||
|
|
||||||
ProfileApp::~ProfileApp() {
|
|
||||||
profile_service_runner_->DeleteSoon(FROM_HERE, profile_objects_.release());
|
|
||||||
leveldb_service_runner_->DeleteSoon(FROM_HERE, leveldb_objects_.release());
|
|
||||||
}
|
|
||||||
|
|
||||||
void ProfileApp::Initialize(mojo::Connector* connector,
|
|
||||||
const mojo::Identity& identity,
|
|
||||||
uint32_t id) {
|
|
||||||
tracing_.Initialize(connector, identity.name());
|
|
||||||
profile_objects_.reset(new ProfileApp::ProfileServiceObjects(
|
|
||||||
GetProfileDirForUserID(identity.user_id())));
|
|
||||||
leveldb_objects_.reset(
|
|
||||||
new ProfileApp::LevelDBServiceObjects(leveldb_service_runner_));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ProfileApp::AcceptConnection(mojo::Connection* connection) {
|
|
||||||
connection->AddInterface<leveldb::LevelDBService>(this);
|
|
||||||
connection->AddInterface<ProfileService>(this);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ProfileApp::Create(mojo::Connection* connection,
|
|
||||||
ProfileServiceRequest request) {
|
|
||||||
profile_service_runner_->PostTask(
|
|
||||||
FROM_HERE,
|
|
||||||
base::Bind(&ProfileApp::ProfileServiceObjects::OnProfileServiceRequest,
|
|
||||||
profile_objects_->AsWeakPtr(), connection,
|
|
||||||
base::Passed(&request)));
|
|
||||||
}
|
|
||||||
|
|
||||||
void ProfileApp::Create(mojo::Connection* connection,
|
|
||||||
leveldb::LevelDBServiceRequest request) {
|
|
||||||
leveldb_service_runner_->PostTask(
|
|
||||||
FROM_HERE,
|
|
||||||
base::Bind(&ProfileApp::LevelDBServiceObjects::OnLevelDBServiceRequest,
|
|
||||||
leveldb_objects_->AsWeakPtr(), connection,
|
|
||||||
base::Passed(&request)));
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace profile
|
|
@@ -1,14 +0,0 @@
|
|||||||
// Copyright 2016 The Chromium Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
#ifndef COMPONENTS_PROFILE_SERVICE_PUBLIC_CPP_CONSTANTS_H_
|
|
||||||
#define COMPONENTS_PROFILE_SERVICE_PUBLIC_CPP_CONSTANTS_H_
|
|
||||||
|
|
||||||
namespace profile {
|
|
||||||
|
|
||||||
extern const char kProfileMojoApplicationName[];
|
|
||||||
|
|
||||||
} // namespace profile
|
|
||||||
|
|
||||||
#endif // COMPONENTS_PROFILE_SERVICE_PUBLIC_CPP_CONSTANTS_H_
|
|
@@ -35,8 +35,6 @@ source_set("browser") {
|
|||||||
"//components/filesystem:lib",
|
"//components/filesystem:lib",
|
||||||
"//components/leveldb:lib",
|
"//components/leveldb:lib",
|
||||||
"//components/mime_util",
|
"//components/mime_util",
|
||||||
"//components/profile_service:lib",
|
|
||||||
"//components/profile_service/public/cpp",
|
|
||||||
"//components/scheduler:common",
|
"//components/scheduler:common",
|
||||||
"//components/tracing",
|
"//components/tracing",
|
||||||
"//components/tracing:startup_tracing",
|
"//components/tracing:startup_tracing",
|
||||||
@@ -77,6 +75,8 @@ source_set("browser") {
|
|||||||
"//services/shell/public/interfaces",
|
"//services/shell/public/interfaces",
|
||||||
"//services/shell/runner/common",
|
"//services/shell/runner/common",
|
||||||
"//services/shell/runner/host:lib",
|
"//services/shell/runner/host:lib",
|
||||||
|
"//services/user:lib",
|
||||||
|
"//services/user/public/cpp",
|
||||||
"//skia",
|
"//skia",
|
||||||
"//skia/public",
|
"//skia/public",
|
||||||
"//sql",
|
"//sql",
|
||||||
|
@@ -18,9 +18,6 @@
|
|||||||
#include "base/macros.h"
|
#include "base/macros.h"
|
||||||
#include "base/rand_util.h"
|
#include "base/rand_util.h"
|
||||||
#include "build/build_config.h"
|
#include "build/build_config.h"
|
||||||
#include "components/profile_service/profile_app.h"
|
|
||||||
#include "components/profile_service/public/cpp/constants.h"
|
|
||||||
#include "components/profile_service/user_id_map.h"
|
|
||||||
#include "content/browser/download/download_manager_impl.h"
|
#include "content/browser/download/download_manager_impl.h"
|
||||||
#include "content/browser/fileapi/chrome_blob_storage_context.h"
|
#include "content/browser/fileapi/chrome_blob_storage_context.h"
|
||||||
#include "content/browser/indexed_db/indexed_db_context_impl.h"
|
#include "content/browser/indexed_db/indexed_db_context_impl.h"
|
||||||
@@ -44,6 +41,9 @@
|
|||||||
#include "services/shell/public/cpp/connection.h"
|
#include "services/shell/public/cpp/connection.h"
|
||||||
#include "services/shell/public/cpp/connector.h"
|
#include "services/shell/public/cpp/connector.h"
|
||||||
#include "services/shell/public/interfaces/shell_client.mojom.h"
|
#include "services/shell/public/interfaces/shell_client.mojom.h"
|
||||||
|
#include "services/user/public/cpp/constants.h"
|
||||||
|
#include "services/user/user_id_map.h"
|
||||||
|
#include "services/user/user_shell_client.h"
|
||||||
#include "storage/browser/database/database_tracker.h"
|
#include "storage/browser/database/database_tracker.h"
|
||||||
#include "storage/browser/fileapi/external_mount_points.h"
|
#include "storage/browser/fileapi/external_mount_points.h"
|
||||||
|
|
||||||
@@ -374,7 +374,7 @@ void BrowserContext::Initialize(
|
|||||||
g_used_user_ids.Get().insert(new_id);
|
g_used_user_ids.Get().insert(new_id);
|
||||||
g_context_to_user_id.Get().push_back(std::make_pair(browser_context, new_id));
|
g_context_to_user_id.Get().push_back(std::make_pair(browser_context, new_id));
|
||||||
|
|
||||||
profile::AssociateMojoUserIDWithProfileDir(new_id, path);
|
user_service::AssociateMojoUserIDWithUserDir(new_id, path);
|
||||||
browser_context->SetUserData(kMojoWasInitialized,
|
browser_context->SetUserData(kMojoWasInitialized,
|
||||||
new base::SupportsUserData::Data);
|
new base::SupportsUserData::Data);
|
||||||
|
|
||||||
@@ -407,9 +407,9 @@ void BrowserContext::Initialize(
|
|||||||
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
|
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
|
||||||
switches::kMojoLocalStorage)) {
|
switches::kMojoLocalStorage)) {
|
||||||
connection->AddEmbeddedApplication(
|
connection->AddEmbeddedApplication(
|
||||||
profile::kProfileMojoApplicationName,
|
user_service::kUserServiceName,
|
||||||
base::Bind(
|
base::Bind(
|
||||||
&profile::CreateProfileApp,
|
&user_service::CreateUserShellClient,
|
||||||
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE),
|
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE),
|
||||||
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB)),
|
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB)),
|
||||||
nullptr);
|
nullptr);
|
||||||
|
@@ -18,8 +18,6 @@
|
|||||||
#include "base/thread_task_runner_handle.h"
|
#include "base/thread_task_runner_handle.h"
|
||||||
#include "components/filesystem/public/interfaces/directory.mojom.h"
|
#include "components/filesystem/public/interfaces/directory.mojom.h"
|
||||||
#include "components/leveldb/public/interfaces/leveldb.mojom.h"
|
#include "components/leveldb/public/interfaces/leveldb.mojom.h"
|
||||||
#include "components/profile_service/public/cpp/constants.h"
|
|
||||||
#include "components/profile_service/public/interfaces/profile.mojom.h"
|
|
||||||
#include "content/browser/dom_storage/dom_storage_area.h"
|
#include "content/browser/dom_storage/dom_storage_area.h"
|
||||||
#include "content/browser/dom_storage/dom_storage_context_impl.h"
|
#include "content/browser/dom_storage/dom_storage_context_impl.h"
|
||||||
#include "content/browser/dom_storage/dom_storage_task_runner.h"
|
#include "content/browser/dom_storage/dom_storage_task_runner.h"
|
||||||
@@ -31,6 +29,8 @@
|
|||||||
#include "mojo/common/common_type_converters.h"
|
#include "mojo/common/common_type_converters.h"
|
||||||
#include "services/shell/public/cpp/connection.h"
|
#include "services/shell/public/cpp/connection.h"
|
||||||
#include "services/shell/public/cpp/connector.h"
|
#include "services/shell/public/cpp/connector.h"
|
||||||
|
#include "services/user/public/cpp/constants.h"
|
||||||
|
#include "services/user/public/interfaces/user_service.mojom.h"
|
||||||
|
|
||||||
namespace content {
|
namespace content {
|
||||||
namespace {
|
namespace {
|
||||||
@@ -118,9 +118,9 @@ class DOMStorageContextWrapper::MojoState {
|
|||||||
CONNECTION_FINISHED
|
CONNECTION_FINISHED
|
||||||
} connection_state_;
|
} connection_state_;
|
||||||
|
|
||||||
std::unique_ptr<mojo::Connection> profile_app_connection_;
|
std::unique_ptr<mojo::Connection> user_service_connection_;
|
||||||
|
|
||||||
profile::ProfileServicePtr profile_service_;
|
user_service::mojom::UserServicePtr user_service_;
|
||||||
filesystem::DirectoryPtr directory_;
|
filesystem::DirectoryPtr directory_;
|
||||||
|
|
||||||
leveldb::LevelDBServicePtr leveldb_service_;
|
leveldb::LevelDBServicePtr leveldb_service_;
|
||||||
@@ -138,22 +138,22 @@ void DOMStorageContextWrapper::MojoState::OpenLocalStorage(
|
|||||||
// If we don't have a filesystem_connection_, we'll need to establish one.
|
// If we don't have a filesystem_connection_, we'll need to establish one.
|
||||||
if (connection_state_ == NO_CONNECTION) {
|
if (connection_state_ == NO_CONNECTION) {
|
||||||
CHECK(connector_);
|
CHECK(connector_);
|
||||||
profile_app_connection_ =
|
user_service_connection_ =
|
||||||
connector_->Connect(profile::kProfileMojoApplicationName);
|
connector_->Connect(user_service::kUserServiceName);
|
||||||
connection_state_ = CONNECTION_IN_PROGRESS;
|
connection_state_ = CONNECTION_IN_PROGRESS;
|
||||||
|
|
||||||
if (!subdirectory_.empty()) {
|
if (!subdirectory_.empty()) {
|
||||||
// We were given a subdirectory to write to. Get it and use a disk backed
|
// We were given a subdirectory to write to. Get it and use a disk backed
|
||||||
// database.
|
// database.
|
||||||
profile_app_connection_->GetInterface(&profile_service_);
|
user_service_connection_->GetInterface(&user_service_);
|
||||||
profile_service_->GetSubDirectory(
|
user_service_->GetSubDirectory(
|
||||||
mojo::String::From(subdirectory_.AsUTF8Unsafe()),
|
mojo::String::From(subdirectory_.AsUTF8Unsafe()),
|
||||||
GetProxy(&directory_),
|
GetProxy(&directory_),
|
||||||
base::Bind(&MojoState::OnDirectoryOpened,
|
base::Bind(&MojoState::OnDirectoryOpened,
|
||||||
weak_ptr_factory_.GetWeakPtr()));
|
weak_ptr_factory_.GetWeakPtr()));
|
||||||
} else {
|
} else {
|
||||||
// We were not given a subdirectory. Use a memory backed database.
|
// We were not given a subdirectory. Use a memory backed database.
|
||||||
profile_app_connection_->GetInterface(&leveldb_service_);
|
user_service_connection_->GetInterface(&leveldb_service_);
|
||||||
leveldb_service_->OpenInMemory(
|
leveldb_service_->OpenInMemory(
|
||||||
GetProxy(&database_),
|
GetProxy(&database_),
|
||||||
base::Bind(&MojoState::OnDatabaseOpened,
|
base::Bind(&MojoState::OnDatabaseOpened,
|
||||||
@@ -183,7 +183,7 @@ void DOMStorageContextWrapper::MojoState::OnDirectoryOpened(
|
|||||||
|
|
||||||
// Now that we have a directory, connect to the LevelDB service and get our
|
// Now that we have a directory, connect to the LevelDB service and get our
|
||||||
// database.
|
// database.
|
||||||
profile_app_connection_->GetInterface(&leveldb_service_);
|
user_service_connection_->GetInterface(&leveldb_service_);
|
||||||
|
|
||||||
leveldb_service_->Open(
|
leveldb_service_->Open(
|
||||||
std::move(directory_), "leveldb", GetProxy(&database_),
|
std::move(directory_), "leveldb", GetProxy(&database_),
|
||||||
@@ -199,11 +199,11 @@ void DOMStorageContextWrapper::MojoState::OnDatabaseOpened(
|
|||||||
leveldb_service_.reset();
|
leveldb_service_.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
// We no longer need the profile service; we've either transferred
|
// We no longer need the user service; we've either transferred
|
||||||
// |directory_| to the leveldb service, or we got a file error and no more is
|
// |directory_| to the leveldb service, or we got a file error and no more is
|
||||||
// possible.
|
// possible.
|
||||||
directory_.reset();
|
directory_.reset();
|
||||||
profile_service_.reset();
|
user_service_.reset();
|
||||||
|
|
||||||
// |leveldb_| should be known to either be valid or invalid by now. Run our
|
// |leveldb_| should be known to either be valid or invalid by now. Run our
|
||||||
// delayed bindings.
|
// delayed bindings.
|
||||||
|
@@ -15,7 +15,6 @@
|
|||||||
#include "base/path_service.h"
|
#include "base/path_service.h"
|
||||||
#include "base/single_thread_task_runner.h"
|
#include "base/single_thread_task_runner.h"
|
||||||
#include "base/thread_task_runner_handle.h"
|
#include "base/thread_task_runner_handle.h"
|
||||||
#include "components/profile_service/public/cpp/constants.h"
|
|
||||||
#include "content/browser/gpu/gpu_process_host.h"
|
#include "content/browser/gpu/gpu_process_host.h"
|
||||||
#include "content/browser/mojo/constants.h"
|
#include "content/browser/mojo/constants.h"
|
||||||
#include "content/common/gpu_process_launch_causes.h"
|
#include "content/common/gpu_process_launch_causes.h"
|
||||||
@@ -42,6 +41,7 @@
|
|||||||
#include "services/shell/public/cpp/shell_client.h"
|
#include "services/shell/public/cpp/shell_client.h"
|
||||||
#include "services/shell/public/interfaces/connector.mojom.h"
|
#include "services/shell/public/interfaces/connector.mojom.h"
|
||||||
#include "services/shell/runner/host/in_process_native_runner.h"
|
#include "services/shell/runner/host/in_process_native_runner.h"
|
||||||
|
#include "services/user/public/cpp/constants.h"
|
||||||
|
|
||||||
namespace content {
|
namespace content {
|
||||||
|
|
||||||
@@ -241,7 +241,7 @@ MojoShellContext::MojoShellContext() {
|
|||||||
IDR_MOJO_CONTENT_RENDERER_MANIFEST);
|
IDR_MOJO_CONTENT_RENDERER_MANIFEST);
|
||||||
manifest_provider_->AddManifestResource("mojo:catalog",
|
manifest_provider_->AddManifestResource("mojo:catalog",
|
||||||
IDR_MOJO_CATALOG_MANIFEST);
|
IDR_MOJO_CATALOG_MANIFEST);
|
||||||
manifest_provider_->AddManifestResource(profile::kProfileMojoApplicationName,
|
manifest_provider_->AddManifestResource(user_service::kUserServiceName,
|
||||||
IDR_MOJO_PROFILE_MANIFEST);
|
IDR_MOJO_PROFILE_MANIFEST);
|
||||||
|
|
||||||
catalog_.reset(new catalog::Factory(file_task_runner.get(), nullptr,
|
catalog_.reset(new catalog::Factory(file_task_runner.get(), nullptr,
|
||||||
|
@@ -9,8 +9,6 @@
|
|||||||
'../cc/cc.gyp:cc_surfaces',
|
'../cc/cc.gyp:cc_surfaces',
|
||||||
'../components/leveldb/leveldb.gyp:leveldb_lib',
|
'../components/leveldb/leveldb.gyp:leveldb_lib',
|
||||||
'../components/mime_util/mime_util.gyp:mime_util',
|
'../components/mime_util/mime_util.gyp:mime_util',
|
||||||
'../components/profile_service/profile_service.gyp:profile_service_lib',
|
|
||||||
'../components/profile_service/profile_service.gyp:profile_service_public_lib',
|
|
||||||
'../components/scheduler/scheduler.gyp:scheduler_common',
|
'../components/scheduler/scheduler.gyp:scheduler_common',
|
||||||
'../components/url_formatter/url_formatter.gyp:url_formatter',
|
'../components/url_formatter/url_formatter.gyp:url_formatter',
|
||||||
'../crypto/crypto.gyp:crypto',
|
'../crypto/crypto.gyp:crypto',
|
||||||
@@ -39,6 +37,8 @@
|
|||||||
'../services/shell/shell.gyp:shell_runner_host_lib',
|
'../services/shell/shell.gyp:shell_runner_host_lib',
|
||||||
'../services/tracing/tracing.gyp:tracing_lib',
|
'../services/tracing/tracing.gyp:tracing_lib',
|
||||||
'../services/tracing/tracing.gyp:tracing_public',
|
'../services/tracing/tracing.gyp:tracing_public',
|
||||||
|
'../services/user/user.gyp:user_service_lib',
|
||||||
|
'../services/user/user.gyp:user_service_public_lib',
|
||||||
'../skia/skia.gyp:skia',
|
'../skia/skia.gyp:skia',
|
||||||
'../skia/skia.gyp:skia_mojo',
|
'../skia/skia.gyp:skia_mojo',
|
||||||
'../sql/sql.gyp:sql',
|
'../sql/sql.gyp:sql',
|
||||||
|
@@ -30,7 +30,7 @@
|
|||||||
<include name="IDR_MOJO_CATALOG_MANIFEST" file="../services/catalog/manifest.json" type="BINDATA" />
|
<include name="IDR_MOJO_CATALOG_MANIFEST" file="../services/catalog/manifest.json" type="BINDATA" />
|
||||||
<include name="IDR_MOJO_CONTENT_BROWSER_MANIFEST" file="${root_out_dir}/content_browser_manifest.json" use_base_dir="false" type="BINDATA" />
|
<include name="IDR_MOJO_CONTENT_BROWSER_MANIFEST" file="${root_out_dir}/content_browser_manifest.json" use_base_dir="false" type="BINDATA" />
|
||||||
<include name="IDR_MOJO_CONTENT_RENDERER_MANIFEST" file="${root_out_dir}/content_renderer_manifest.json" use_base_dir="false" type="BINDATA" />
|
<include name="IDR_MOJO_CONTENT_RENDERER_MANIFEST" file="${root_out_dir}/content_renderer_manifest.json" use_base_dir="false" type="BINDATA" />
|
||||||
<include name="IDR_MOJO_PROFILE_MANIFEST" file="../components/profile_service/manifest.json" type="BINDATA" />
|
<include name="IDR_MOJO_PROFILE_MANIFEST" file="../services/user/manifest.json" type="BINDATA" />
|
||||||
<include name="IDR_NETWORK_ERROR_LISTING_HTML" file="browser/resources/net/network_errors_listing.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
|
<include name="IDR_NETWORK_ERROR_LISTING_HTML" file="browser/resources/net/network_errors_listing.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
|
||||||
<include name="IDR_NETWORK_ERROR_LISTING_JS" file="browser/resources/net/network_errors_listing.js" flattenhtml="true" type="BINDATA" />
|
<include name="IDR_NETWORK_ERROR_LISTING_JS" file="browser/resources/net/network_errors_listing.js" flattenhtml="true" type="BINDATA" />
|
||||||
<include name="IDR_NETWORK_ERROR_LISTING_CSS" file="browser/resources/net/network_errors_listing.css" flattenhtml="true" type="BINDATA" />
|
<include name="IDR_NETWORK_ERROR_LISTING_CSS" file="browser/resources/net/network_errors_listing.css" flattenhtml="true" type="BINDATA" />
|
||||||
|
@@ -146,9 +146,9 @@ mojo_application_manifest("browser_manifest") {
|
|||||||
type = "exe"
|
type = "exe"
|
||||||
application_name = "content_browser"
|
application_name = "content_browser"
|
||||||
source = "mojo/content_browser_manifest.json"
|
source = "mojo/content_browser_manifest.json"
|
||||||
packaged_applications = [ "profile" ]
|
packaged_applications = [ "user" ]
|
||||||
deps = [
|
deps = [
|
||||||
"//components/profile_service:manifest",
|
"//services/user:manifest",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -7,12 +7,12 @@ import("//mojo/public/mojo_application_manifest.gni")
|
|||||||
|
|
||||||
source_set("lib") {
|
source_set("lib") {
|
||||||
sources = [
|
sources = [
|
||||||
"profile_app.cc",
|
|
||||||
"profile_app.h",
|
|
||||||
"profile_service_impl.cc",
|
|
||||||
"profile_service_impl.h",
|
|
||||||
"user_id_map.cc",
|
"user_id_map.cc",
|
||||||
"user_id_map.h",
|
"user_id_map.h",
|
||||||
|
"user_service.cc",
|
||||||
|
"user_service.h",
|
||||||
|
"user_shell_client.cc",
|
||||||
|
"user_shell_client.h",
|
||||||
]
|
]
|
||||||
|
|
||||||
deps = [
|
deps = [
|
||||||
@@ -21,7 +21,6 @@ source_set("lib") {
|
|||||||
"//components/filesystem/public/interfaces",
|
"//components/filesystem/public/interfaces",
|
||||||
"//components/leveldb:lib",
|
"//components/leveldb:lib",
|
||||||
"//components/leveldb/public/interfaces",
|
"//components/leveldb/public/interfaces",
|
||||||
"//components/profile_service/public/interfaces",
|
|
||||||
"//mojo/common",
|
"//mojo/common",
|
||||||
"//mojo/common:common_base",
|
"//mojo/common:common_base",
|
||||||
"//mojo/message_pump",
|
"//mojo/message_pump",
|
||||||
@@ -29,6 +28,7 @@ source_set("lib") {
|
|||||||
"//services/shell/public/cpp",
|
"//services/shell/public/cpp",
|
||||||
"//services/shell/public/interfaces",
|
"//services/shell/public/interfaces",
|
||||||
"//services/tracing/public/cpp",
|
"//services/tracing/public/cpp",
|
||||||
|
"//services/user/public/interfaces",
|
||||||
"//url",
|
"//url",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -38,6 +38,6 @@ source_set("lib") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mojo_application_manifest("manifest") {
|
mojo_application_manifest("manifest") {
|
||||||
application_name = "profile"
|
application_name = "user"
|
||||||
source = "manifest.json"
|
source = "manifest.json"
|
||||||
}
|
}
|
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 1,
|
"manifest_version": 1,
|
||||||
"name": "mojo:profile",
|
"name": "mojo:user",
|
||||||
"process-group": "browser",
|
"process-group": "browser",
|
||||||
"display_name": "Profile",
|
"display_name": "User Service",
|
||||||
"capabilities": {
|
"capabilities": {
|
||||||
"required": {
|
"required": {
|
||||||
"mojo:tracing": { "interfaces": [ "*" ] }
|
"mojo:tracing": { "interfaces": [ "*" ] }
|
@@ -2,10 +2,10 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
#include "components/profile_service/public/cpp/constants.h"
|
#include "services/user/public/cpp/constants.h"
|
||||||
|
|
||||||
namespace profile {
|
namespace user_service {
|
||||||
|
|
||||||
const char kProfileMojoApplicationName[] = "mojo:profile";
|
const char kUserServiceName[] = "mojo:user";
|
||||||
|
|
||||||
} // namespace profile
|
} // namespace user_service
|
14
services/user/public/cpp/constants.h
Normal file
14
services/user/public/cpp/constants.h
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// Copyright 2016 The Chromium Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#ifndef SERVICES_USER_PUBLIC_CPP_CONSTANTS_H_
|
||||||
|
#define SERVICES_USER_PUBLIC_CPP_CONSTANTS_H_
|
||||||
|
|
||||||
|
namespace user_service {
|
||||||
|
|
||||||
|
extern const char kUserServiceName[];
|
||||||
|
|
||||||
|
} // namespace user_service
|
||||||
|
|
||||||
|
#endif // SERVICES_USER_PUBLIC_CPP_CONSTANTS_H_
|
@@ -6,7 +6,7 @@ import("//mojo/public/tools/bindings/mojom.gni")
|
|||||||
|
|
||||||
mojom("interfaces") {
|
mojom("interfaces") {
|
||||||
sources = [
|
sources = [
|
||||||
"profile.mojom",
|
"user_service.mojom",
|
||||||
]
|
]
|
||||||
|
|
||||||
deps = [
|
deps = [
|
@@ -2,17 +2,17 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
module profile;
|
module user_service.mojom;
|
||||||
|
|
||||||
import "components/filesystem/public/interfaces/directory.mojom";
|
import "components/filesystem/public/interfaces/directory.mojom";
|
||||||
import "components/filesystem/public/interfaces/types.mojom";
|
import "components/filesystem/public/interfaces/types.mojom";
|
||||||
|
|
||||||
// An encapsulation around the per-profile storage.
|
// An encapsulation around the per-profile storage.
|
||||||
//
|
//
|
||||||
// TODO(erg): A Profile should be strongly bound to a User; eventually, during
|
// TODO(erg): An instance of UserService should be strongly bound to a specific
|
||||||
// startup of the Profile process, we sandbox the process so the only directory
|
// user id; eventually during startup of the User Service process, we sandbox
|
||||||
// it has access to is the User's profile.
|
// the process so the only directory it has access to is the user's directory.
|
||||||
interface ProfileService {
|
interface UserService {
|
||||||
// Returns the user profile directory.
|
// Returns the user profile directory.
|
||||||
GetDirectory(filesystem.Directory& dir) => ();
|
GetDirectory(filesystem.Directory& dir) => ();
|
||||||
|
|
@@ -11,23 +11,23 @@
|
|||||||
},
|
},
|
||||||
'targets': [
|
'targets': [
|
||||||
{
|
{
|
||||||
# GN version: //components/profile_serivce:lib
|
# GN version: //services/user:lib
|
||||||
'target_name': 'profile_service_lib',
|
'target_name': 'user_service_lib',
|
||||||
'type': 'static_library',
|
'type': 'static_library',
|
||||||
'include_dirs': [
|
'include_dirs': [
|
||||||
'../..',
|
'../..',
|
||||||
],
|
],
|
||||||
'sources': [
|
'sources': [
|
||||||
'profile_app.cc',
|
|
||||||
'profile_app.h',
|
|
||||||
'profile_service_impl.cc',
|
|
||||||
'profile_service_impl.h',
|
|
||||||
'user_id_map.cc',
|
'user_id_map.cc',
|
||||||
'user_id_map.h',
|
'user_id_map.h',
|
||||||
|
'user_service.cc',
|
||||||
|
'user_service.h',
|
||||||
|
'user_shell_client.cc',
|
||||||
|
'user_shell_client.h',
|
||||||
],
|
],
|
||||||
'dependencies': [
|
'dependencies': [
|
||||||
'profile_app_manifest',
|
'user_app_manifest',
|
||||||
'profile_service_bindings',
|
'user_service_bindings',
|
||||||
'../../base/base.gyp:base',
|
'../../base/base.gyp:base',
|
||||||
'../../components/filesystem/filesystem.gyp:filesystem_lib',
|
'../../components/filesystem/filesystem.gyp:filesystem_lib',
|
||||||
'../../components/leveldb/leveldb.gyp:leveldb_lib',
|
'../../components/leveldb/leveldb.gyp:leveldb_lib',
|
||||||
@@ -39,23 +39,23 @@
|
|||||||
'../../url/url.gyp:url_lib',
|
'../../url/url.gyp:url_lib',
|
||||||
],
|
],
|
||||||
'export_dependent_settings': [
|
'export_dependent_settings': [
|
||||||
'profile_service_bindings',
|
'user_service_bindings',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# GN version: //components/profile_service/public/interfaces
|
# GN version: //services/user/public/interfaces
|
||||||
'target_name': 'profile_service_bindings',
|
'target_name': 'user_service_bindings',
|
||||||
'type': 'static_library',
|
'type': 'static_library',
|
||||||
'dependencies': [
|
'dependencies': [
|
||||||
'profile_service_bindings_mojom',
|
'user_service_bindings_mojom',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'target_name': 'profile_service_bindings_mojom',
|
'target_name': 'user_service_bindings_mojom',
|
||||||
'type': 'none',
|
'type': 'none',
|
||||||
'variables': {
|
'variables': {
|
||||||
'mojom_files': [
|
'mojom_files': [
|
||||||
'public/interfaces/profile.mojom',
|
'public/interfaces/user_service.mojom',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'dependencies': [
|
'dependencies': [
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'target_name': 'profile_service_public_lib',
|
'target_name': 'user_service_public_lib',
|
||||||
'type': 'static_library',
|
'type': 'static_library',
|
||||||
'sources': [
|
'sources': [
|
||||||
'public/cpp/constants.cc',
|
'public/cpp/constants.cc',
|
||||||
@@ -78,13 +78,13 @@
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# GN version: //components/profile_service:manifest
|
# GN version: //services/user:manifest
|
||||||
'target_name': 'profile_app_manifest',
|
'target_name': 'user_app_manifest',
|
||||||
'type': 'none',
|
'type': 'none',
|
||||||
'variables': {
|
'variables': {
|
||||||
'application_type': 'mojo',
|
'application_type': 'mojo',
|
||||||
'application_name': 'profile',
|
'application_name': 'user',
|
||||||
'source_manifest': '<(DEPTH)/components/profile_service/manifest.json',
|
'source_manifest': '<(DEPTH)/services/user/manifest.json',
|
||||||
},
|
},
|
||||||
'includes': [
|
'includes': [
|
||||||
'../../mojo/public/mojo_application_manifest.gypi',
|
'../../mojo/public/mojo_application_manifest.gypi',
|
@@ -2,28 +2,28 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
#include "components/profile_service/user_id_map.h"
|
#include "services/user/user_id_map.h"
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
#include "base/lazy_instance.h"
|
#include "base/lazy_instance.h"
|
||||||
|
|
||||||
namespace profile {
|
namespace user_service {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
base::LazyInstance<std::map<std::string, base::FilePath>>
|
base::LazyInstance<std::map<std::string, base::FilePath>>
|
||||||
g_user_id_to_data_dir = LAZY_INSTANCE_INITIALIZER;
|
g_user_id_to_data_dir = LAZY_INSTANCE_INITIALIZER;
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
void AssociateMojoUserIDWithProfileDir(const std::string& user_id,
|
void AssociateMojoUserIDWithUserDir(const std::string& user_id,
|
||||||
const base::FilePath& profile_data_dir) {
|
const base::FilePath& user_dir) {
|
||||||
g_user_id_to_data_dir.Get()[user_id] = profile_data_dir;
|
g_user_id_to_data_dir.Get()[user_id] = user_dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
base::FilePath GetProfileDirForUserID(const std::string& user_id) {
|
base::FilePath GetUserDirForUserID(const std::string& user_id) {
|
||||||
auto it = g_user_id_to_data_dir.Get().find(user_id);
|
auto it = g_user_id_to_data_dir.Get().find(user_id);
|
||||||
DCHECK(it != g_user_id_to_data_dir.Get().end());
|
DCHECK(it != g_user_id_to_data_dir.Get().end());
|
||||||
return it->second;
|
return it->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace profile
|
} // namespace user_service
|
@@ -2,30 +2,30 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
#ifndef COMPONENTS_PROFILE_SERVICE_USER_ID_MAP_H_
|
#ifndef SERVICES_USER_USER_ID_MAP_H_
|
||||||
#define COMPONENTS_PROFILE_SERVICE_USER_ID_MAP_H_
|
#define SERVICES_USER_USER_ID_MAP_H_
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "base/files/file_path.h"
|
#include "base/files/file_path.h"
|
||||||
|
|
||||||
namespace profile {
|
namespace user_service {
|
||||||
|
|
||||||
// Currently, ProfileApp is run from within the chrome process. This means that
|
// Currently, UserApp is run from within the chrome process. This means that
|
||||||
// the ApplicationLoader is registered during MojoShellContext startup, even
|
// the ApplicationLoader is registered during MojoShellContext startup, even
|
||||||
// though the application itself is not started. As soon as a BrowserContext is
|
// though the application itself is not started. As soon as a BrowserContext is
|
||||||
// created, the BrowserContext will choose a |user_id| for itself and call us
|
// created, the BrowserContext will choose a |user_id| for itself and call us
|
||||||
// to register the mapping from |user_id| to |profile_data_dir|.
|
// to register the mapping from |user_id| to |user_dir|.
|
||||||
//
|
//
|
||||||
// This data is then accessed when we get our Initialize() call.
|
// This data is then accessed when we get our Initialize() call.
|
||||||
//
|
//
|
||||||
// TODO(erg): This is a temporary hack until we redo how we initialize mojo
|
// TODO(erg): This is a temporary hack until we redo how we initialize mojo
|
||||||
// applications inside of chrome in general; this system won't work once
|
// applications inside of chrome in general; this system won't work once
|
||||||
// ProfileApp gets put in its own sandboxed process.
|
// UserApp gets put in its own sandboxed process.
|
||||||
void AssociateMojoUserIDWithProfileDir(const std::string& user_id,
|
void AssociateMojoUserIDWithUserDir(const std::string& user_id,
|
||||||
const base::FilePath& profile_data_dir);
|
const base::FilePath& user_dir);
|
||||||
|
|
||||||
base::FilePath GetProfileDirForUserID(const std::string& user_id);
|
base::FilePath GetUserDirForUserID(const std::string& user_id);
|
||||||
|
|
||||||
} // namespace profile
|
} // namespace user_service
|
||||||
|
|
||||||
#endif // COMPONENTS_PROFILE_SERVICE_USER_ID_MAP_H_
|
#endif // SERVICES_USER_USER_ID_MAP_H_
|
@@ -2,7 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
#include "components/profile_service/profile_service_impl.h"
|
#include "services/user/user_service.h"
|
||||||
|
|
||||||
#include "base/files/file.h"
|
#include "base/files/file.h"
|
||||||
#include "base/files/file_path.h"
|
#include "base/files/file_path.h"
|
||||||
@@ -15,19 +15,18 @@
|
|||||||
#include "services/shell/public/cpp/connection.h"
|
#include "services/shell/public/cpp/connection.h"
|
||||||
#include "services/shell/public/cpp/message_loop_ref.h"
|
#include "services/shell/public/cpp/message_loop_ref.h"
|
||||||
|
|
||||||
namespace profile {
|
namespace user_service {
|
||||||
|
|
||||||
ProfileServiceImpl::ProfileServiceImpl(
|
UserService::UserService(const base::FilePath& base_user_dir,
|
||||||
const base::FilePath& base_profile_dir,
|
const scoped_refptr<filesystem::LockTable>& lock_table)
|
||||||
const scoped_refptr<filesystem::LockTable>& lock_table)
|
: lock_table_(lock_table), path_(base_user_dir) {
|
||||||
: lock_table_(lock_table), path_(base_profile_dir) {
|
|
||||||
base::CreateDirectory(path_);
|
base::CreateDirectory(path_);
|
||||||
}
|
}
|
||||||
|
|
||||||
ProfileServiceImpl::~ProfileServiceImpl() {}
|
UserService::~UserService() {}
|
||||||
|
|
||||||
void ProfileServiceImpl::GetDirectory(filesystem::DirectoryRequest request,
|
void UserService::GetDirectory(filesystem::DirectoryRequest request,
|
||||||
const GetDirectoryCallback& callback) {
|
const GetDirectoryCallback& callback) {
|
||||||
new filesystem::DirectoryImpl(std::move(request),
|
new filesystem::DirectoryImpl(std::move(request),
|
||||||
path_,
|
path_,
|
||||||
scoped_ptr<base::ScopedTempDir>(),
|
scoped_ptr<base::ScopedTempDir>(),
|
||||||
@@ -35,11 +34,10 @@ void ProfileServiceImpl::GetDirectory(filesystem::DirectoryRequest request,
|
|||||||
callback.Run();
|
callback.Run();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProfileServiceImpl::GetSubDirectory(
|
void UserService::GetSubDirectory(const mojo::String& sub_directory_path,
|
||||||
const mojo::String& sub_directory_path,
|
filesystem::DirectoryRequest request,
|
||||||
filesystem::DirectoryRequest request,
|
const GetSubDirectoryCallback& callback) {
|
||||||
const GetSubDirectoryCallback& callback) {
|
// Ensure that we've made |subdirectory| recursively under our user dir.
|
||||||
// Ensure that we've made |subdirectory| recursively under our profile.
|
|
||||||
base::FilePath subdir = path_.Append(
|
base::FilePath subdir = path_.Append(
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
base::UTF8ToWide(sub_directory_path.To<std::string>()));
|
base::UTF8ToWide(sub_directory_path.To<std::string>()));
|
||||||
@@ -57,4 +55,4 @@ void ProfileServiceImpl::GetSubDirectory(
|
|||||||
callback.Run(filesystem::FileError::OK);
|
callback.Run(filesystem::FileError::OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace profile
|
} // namespace user_service
|
@@ -2,15 +2,15 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
#ifndef COMPONENTS_PROFILE_SERVICE_PROFILE_SERVICE_IMPL_H_
|
#ifndef SERVICES_USER_USER_SERVICE_IMPL_H_
|
||||||
#define COMPONENTS_PROFILE_SERVICE_PROFILE_SERVICE_IMPL_H_
|
#define SERVICES_USER_USER_SERVICE_IMPL_H_
|
||||||
|
|
||||||
#include "base/files/file_path.h"
|
#include "base/files/file_path.h"
|
||||||
#include "components/filesystem/public/interfaces/directory.mojom.h"
|
#include "components/filesystem/public/interfaces/directory.mojom.h"
|
||||||
#include "components/profile_service/public/interfaces/profile.mojom.h"
|
|
||||||
#include "mojo/public/cpp/bindings/interface_request.h"
|
#include "mojo/public/cpp/bindings/interface_request.h"
|
||||||
#include "mojo/public/cpp/bindings/strong_binding.h"
|
#include "mojo/public/cpp/bindings/strong_binding.h"
|
||||||
#include "services/shell/public/cpp/connection.h"
|
#include "services/shell/public/cpp/connection.h"
|
||||||
|
#include "services/user/public/interfaces/user_service.mojom.h"
|
||||||
|
|
||||||
namespace filesystem {
|
namespace filesystem {
|
||||||
class LockTable;
|
class LockTable;
|
||||||
@@ -20,16 +20,16 @@ namespace mojo {
|
|||||||
class MessageLoopRef;
|
class MessageLoopRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace profile {
|
namespace user_service {
|
||||||
|
|
||||||
// A service which serves directories to callers.
|
// A service which serves directories to callers.
|
||||||
class ProfileServiceImpl : public ProfileService {
|
class UserService : public mojom::UserService {
|
||||||
public:
|
public:
|
||||||
ProfileServiceImpl(const base::FilePath& base_profile_dir,
|
UserService(const base::FilePath& base_user_dir,
|
||||||
const scoped_refptr<filesystem::LockTable>& lock_table);
|
const scoped_refptr<filesystem::LockTable>& lock_table);
|
||||||
~ProfileServiceImpl() override;
|
~UserService() override;
|
||||||
|
|
||||||
// Overridden from ProfileService:
|
// Overridden from mojom::UserService:
|
||||||
void GetDirectory(filesystem::DirectoryRequest request,
|
void GetDirectory(filesystem::DirectoryRequest request,
|
||||||
const GetDirectoryCallback& callback) override;
|
const GetDirectoryCallback& callback) override;
|
||||||
void GetSubDirectory(const mojo::String& sub_directory_path,
|
void GetSubDirectory(const mojo::String& sub_directory_path,
|
||||||
@@ -40,9 +40,9 @@ class ProfileServiceImpl : public ProfileService {
|
|||||||
scoped_refptr<filesystem::LockTable> lock_table_;
|
scoped_refptr<filesystem::LockTable> lock_table_;
|
||||||
base::FilePath path_;
|
base::FilePath path_;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(ProfileServiceImpl);
|
DISALLOW_COPY_AND_ASSIGN(UserService);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace profile
|
} // namespace user_service
|
||||||
|
|
||||||
#endif // COMPONENTS_PROFILE_SERVICE_PROFILE_SERVICE_IMPL_H_
|
#endif // SERVICES_USER_USER_SERVICE_IMPL_H_
|
125
services/user/user_shell_client.cc
Normal file
125
services/user/user_shell_client.cc
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
// Copyright 2016 The Chromium Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#include "services/user/user_shell_client.h"
|
||||||
|
|
||||||
|
#include "base/bind.h"
|
||||||
|
#include "base/memory/weak_ptr.h"
|
||||||
|
#include "components/filesystem/lock_table.h"
|
||||||
|
#include "components/leveldb/leveldb_service_impl.h"
|
||||||
|
#include "mojo/public/cpp/bindings/callback.h"
|
||||||
|
#include "services/shell/public/cpp/connection.h"
|
||||||
|
#include "services/user/user_id_map.h"
|
||||||
|
#include "services/user/user_service.h"
|
||||||
|
|
||||||
|
namespace user_service {
|
||||||
|
|
||||||
|
class UserShellClient::UserServiceObjects
|
||||||
|
: public base::SupportsWeakPtr<UserServiceObjects> {
|
||||||
|
public:
|
||||||
|
// Created on the main thread.
|
||||||
|
UserServiceObjects(base::FilePath user_dir) : user_dir_(user_dir) {}
|
||||||
|
|
||||||
|
// Destroyed on the |user_service_runner_|.
|
||||||
|
~UserServiceObjects() {}
|
||||||
|
|
||||||
|
// Called on the |user_service_runner_|.
|
||||||
|
void OnUserServiceRequest(mojo::Connection* connection,
|
||||||
|
mojom::UserServiceRequest request) {
|
||||||
|
if (!lock_table_)
|
||||||
|
lock_table_ = new filesystem::LockTable;
|
||||||
|
user_service_bindings_.AddBinding(new UserService(user_dir_, lock_table_),
|
||||||
|
std::move(request));
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
mojo::BindingSet<mojom::UserService> user_service_bindings_;
|
||||||
|
scoped_refptr<filesystem::LockTable> lock_table_;
|
||||||
|
base::FilePath user_dir_;
|
||||||
|
|
||||||
|
DISALLOW_COPY_AND_ASSIGN(UserServiceObjects);
|
||||||
|
};
|
||||||
|
|
||||||
|
class UserShellClient::LevelDBServiceObjects
|
||||||
|
: public base::SupportsWeakPtr<LevelDBServiceObjects> {
|
||||||
|
public:
|
||||||
|
// Created on the main thread.
|
||||||
|
LevelDBServiceObjects(scoped_refptr<base::SingleThreadTaskRunner> task_runner)
|
||||||
|
: task_runner_(std::move(task_runner)) {}
|
||||||
|
|
||||||
|
// Destroyed on the |leveldb_service_runner_|.
|
||||||
|
~LevelDBServiceObjects() {}
|
||||||
|
|
||||||
|
// Called on the |leveldb_service_runner_|.
|
||||||
|
void OnLevelDBServiceRequest(mojo::Connection* connection,
|
||||||
|
leveldb::LevelDBServiceRequest request) {
|
||||||
|
if (!leveldb_service_)
|
||||||
|
leveldb_service_.reset(new leveldb::LevelDBServiceImpl(task_runner_));
|
||||||
|
leveldb_bindings_.AddBinding(leveldb_service_.get(), std::move(request));
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
|
||||||
|
|
||||||
|
// Variables that are only accessible on the |leveldb_service_runner_| thread.
|
||||||
|
scoped_ptr<leveldb::LevelDBService> leveldb_service_;
|
||||||
|
mojo::BindingSet<leveldb::LevelDBService> leveldb_bindings_;
|
||||||
|
|
||||||
|
DISALLOW_COPY_AND_ASSIGN(LevelDBServiceObjects);
|
||||||
|
};
|
||||||
|
|
||||||
|
scoped_ptr<mojo::ShellClient> CreateUserShellClient(
|
||||||
|
scoped_refptr<base::SingleThreadTaskRunner> user_service_runner,
|
||||||
|
scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner) {
|
||||||
|
return make_scoped_ptr(new UserShellClient(std::move(user_service_runner),
|
||||||
|
std::move(leveldb_service_runner)));
|
||||||
|
}
|
||||||
|
|
||||||
|
UserShellClient::UserShellClient(
|
||||||
|
scoped_refptr<base::SingleThreadTaskRunner> user_service_runner,
|
||||||
|
scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner)
|
||||||
|
: user_service_runner_(std::move(user_service_runner)),
|
||||||
|
leveldb_service_runner_(std::move(leveldb_service_runner)) {}
|
||||||
|
|
||||||
|
UserShellClient::~UserShellClient() {
|
||||||
|
user_service_runner_->DeleteSoon(FROM_HERE, user_objects_.release());
|
||||||
|
leveldb_service_runner_->DeleteSoon(FROM_HERE, leveldb_objects_.release());
|
||||||
|
}
|
||||||
|
|
||||||
|
void UserShellClient::Initialize(mojo::Connector* connector,
|
||||||
|
const mojo::Identity& identity,
|
||||||
|
uint32_t id) {
|
||||||
|
tracing_.Initialize(connector, identity.name());
|
||||||
|
user_objects_.reset(new UserShellClient::UserServiceObjects(
|
||||||
|
GetUserDirForUserID(identity.user_id())));
|
||||||
|
leveldb_objects_.reset(
|
||||||
|
new UserShellClient::LevelDBServiceObjects(leveldb_service_runner_));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool UserShellClient::AcceptConnection(mojo::Connection* connection) {
|
||||||
|
connection->AddInterface<leveldb::LevelDBService>(this);
|
||||||
|
connection->AddInterface<mojom::UserService>(this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UserShellClient::Create(mojo::Connection* connection,
|
||||||
|
mojom::UserServiceRequest request) {
|
||||||
|
user_service_runner_->PostTask(
|
||||||
|
FROM_HERE,
|
||||||
|
base::Bind(&UserShellClient::UserServiceObjects::OnUserServiceRequest,
|
||||||
|
user_objects_->AsWeakPtr(), connection,
|
||||||
|
base::Passed(&request)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void UserShellClient::Create(mojo::Connection* connection,
|
||||||
|
leveldb::LevelDBServiceRequest request) {
|
||||||
|
leveldb_service_runner_->PostTask(
|
||||||
|
FROM_HERE,
|
||||||
|
base::Bind(
|
||||||
|
&UserShellClient::LevelDBServiceObjects::OnLevelDBServiceRequest,
|
||||||
|
leveldb_objects_->AsWeakPtr(), connection,
|
||||||
|
base::Passed(&request)));
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace user_service
|
@@ -2,39 +2,32 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
#ifndef COMPONENTS_PROFILE_SERVICE_PROFILE_APP_H_
|
#ifndef SERVICES_USER_USER_SHELL_CLIENT_H_
|
||||||
#define COMPONENTS_PROFILE_SERVICE_PROFILE_APP_H_
|
#define SERVICES_USER_USER_SHELL_CLIENT_H_
|
||||||
|
|
||||||
#include "base/memory/ref_counted.h"
|
#include "base/memory/ref_counted.h"
|
||||||
#include "components/filesystem/lock_table.h"
|
#include "components/filesystem/lock_table.h"
|
||||||
#include "components/leveldb/public/interfaces/leveldb.mojom.h"
|
#include "components/leveldb/public/interfaces/leveldb.mojom.h"
|
||||||
#include "components/profile_service/public/interfaces/profile.mojom.h"
|
|
||||||
#include "mojo/public/cpp/bindings/binding_set.h"
|
#include "mojo/public/cpp/bindings/binding_set.h"
|
||||||
#include "services/shell/public/cpp/interface_factory.h"
|
#include "services/shell/public/cpp/interface_factory.h"
|
||||||
#include "services/shell/public/cpp/shell_client.h"
|
#include "services/shell/public/cpp/shell_client.h"
|
||||||
#include "services/tracing/public/cpp/tracing_impl.h"
|
#include "services/tracing/public/cpp/tracing_impl.h"
|
||||||
|
#include "services/user/public/interfaces/user_service.mojom.h"
|
||||||
|
|
||||||
namespace profile {
|
namespace user_service {
|
||||||
|
|
||||||
scoped_ptr<mojo::ShellClient> CreateProfileApp(
|
scoped_ptr<mojo::ShellClient> CreateUserShellClient(
|
||||||
scoped_refptr<base::SingleThreadTaskRunner> profile_service_runner,
|
scoped_refptr<base::SingleThreadTaskRunner> user_service_runner,
|
||||||
scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner);
|
scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner);
|
||||||
|
|
||||||
// Application which hands off per-profile services.
|
class UserShellClient : public mojo::ShellClient,
|
||||||
//
|
public mojo::InterfaceFactory<mojom::UserService>,
|
||||||
// This Application serves ProfileService. In the future, this application will
|
public mojo::InterfaceFactory<leveldb::LevelDBService> {
|
||||||
// probably also offer any service that most Profile using applications will
|
|
||||||
// need, such as preferences; this class will have to be made into a
|
|
||||||
// application which is an InterfaceProvider which internally spawns threads
|
|
||||||
// for different sub-applications.
|
|
||||||
class ProfileApp : public mojo::ShellClient,
|
|
||||||
public mojo::InterfaceFactory<ProfileService>,
|
|
||||||
public mojo::InterfaceFactory<leveldb::LevelDBService> {
|
|
||||||
public:
|
public:
|
||||||
ProfileApp(
|
UserShellClient(
|
||||||
scoped_refptr<base::SingleThreadTaskRunner> profile_service_runner,
|
scoped_refptr<base::SingleThreadTaskRunner> user_service_runner,
|
||||||
scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner);
|
scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner);
|
||||||
~ProfileApp() override;
|
~UserShellClient() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// |ShellClient| override:
|
// |ShellClient| override:
|
||||||
@@ -43,9 +36,9 @@ class ProfileApp : public mojo::ShellClient,
|
|||||||
uint32_t id) override;
|
uint32_t id) override;
|
||||||
bool AcceptConnection(mojo::Connection* connection) override;
|
bool AcceptConnection(mojo::Connection* connection) override;
|
||||||
|
|
||||||
// |InterfaceFactory<ProfileService>| implementation:
|
// |InterfaceFactory<mojom::UserService>| implementation:
|
||||||
void Create(mojo::Connection* connection,
|
void Create(mojo::Connection* connection,
|
||||||
ProfileServiceRequest request) override;
|
mojom::UserServiceRequest request) override;
|
||||||
|
|
||||||
// |InterfaceFactory<LevelDBService>| implementation:
|
// |InterfaceFactory<LevelDBService>| implementation:
|
||||||
void Create(mojo::Connection* connection,
|
void Create(mojo::Connection* connection,
|
||||||
@@ -55,22 +48,22 @@ class ProfileApp : public mojo::ShellClient,
|
|||||||
leveldb::LevelDBServiceRequest request);
|
leveldb::LevelDBServiceRequest request);
|
||||||
void OnLevelDBServiceError();
|
void OnLevelDBServiceError();
|
||||||
|
|
||||||
scoped_refptr<base::SingleThreadTaskRunner> profile_service_runner_;
|
scoped_refptr<base::SingleThreadTaskRunner> user_service_runner_;
|
||||||
scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner_;
|
scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner_;
|
||||||
|
|
||||||
mojo::TracingImpl tracing_;
|
mojo::TracingImpl tracing_;
|
||||||
|
|
||||||
// We create these two objects so we can delete them on the correct task
|
// We create these two objects so we can delete them on the correct task
|
||||||
// runners.
|
// runners.
|
||||||
class ProfileServiceObjects;
|
class UserServiceObjects;
|
||||||
scoped_ptr<ProfileServiceObjects> profile_objects_;
|
scoped_ptr<UserServiceObjects> user_objects_;
|
||||||
|
|
||||||
class LevelDBServiceObjects;
|
class LevelDBServiceObjects;
|
||||||
scoped_ptr<LevelDBServiceObjects> leveldb_objects_;
|
scoped_ptr<LevelDBServiceObjects> leveldb_objects_;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(ProfileApp);
|
DISALLOW_COPY_AND_ASSIGN(UserShellClient);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace profile
|
} // namespace user_service
|
||||||
|
|
||||||
#endif // COMPONENTS_PROFILE_SERVICE_PROFILE_APP_H_
|
#endif // SERVICES_USER_USER_SHELL_CLIENT_H_
|
Reference in New Issue
Block a user