Commit 97fb1c36 authored by Thanh Nguyen's avatar Thanh Nguyen Committed by Commit Bot

[local-search-service] Implement LocalSearchServiceProvider for LSS

Implements LocalSearchServiceProvider and related classes for LSS.

Design doc: go/lss-sandboxing
Implementation plan: go/lss-sandboxing-impl

Bug: 1137560
Change-Id: I46b43dc5ac9453e3d6da8eceb24293aa19bb3d50
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2556888Reviewed-by: default avatarJia Meng <jiameng@chromium.org>
Commit-Queue: Thanh Nguyen <thanhdng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#830909}
parent eb72711b
# Copyright 2014 The Chromium Authors.All rights reserved.
# Copyright 2014 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.
......@@ -2378,6 +2378,7 @@ static_library("browser") {
"//chromeos/components/help_app_ui",
"//chromeos/components/help_app_ui:mojo_bindings",
"//chromeos/components/local_search_service",
"//chromeos/components/local_search_service/public/cpp:cpp",
"//chromeos/components/local_search_service/public/mojom",
"//chromeos/components/media_app_ui",
"//chromeos/components/media_app_ui:mojo_bindings",
......
......@@ -53,6 +53,21 @@ source_set("local_search_service") {
]
}
source_set("local_search_service_provider") {
sources = [
"local_search_service_provider_for_testing.cc",
"local_search_service_provider_for_testing.h",
"oop_local_search_service_provider.cc",
"oop_local_search_service_provider.h",
]
deps = [
"//chromeos/components/local_search_service:local_search_service",
"//chromeos/components/local_search_service/public/cpp:cpp",
"//content/public/browser:browser",
]
}
source_set("local_search_service_proxy") {
sources = [
"index_sync_proxy.cc",
......@@ -99,6 +114,7 @@ source_set("unit_tests") {
"inverted_index_search_unittest.cc",
"inverted_index_unittest.cc",
"linear_map_search_unittest.cc",
"local_search_service_provider_unittest.cc",
"local_search_service_sync_proxy_unittest.cc",
"local_search_service_sync_unittest.cc",
"local_search_service_unittest.cc",
......@@ -109,6 +125,7 @@ source_set("unit_tests") {
deps = [
":local_search_service",
":local_search_service_provider",
":local_search_service_proxy",
":test_support",
"//base/test:test_support",
......
// Copyright 2020 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 "chromeos/components/local_search_service/local_search_service_provider_for_testing.h"
#include <memory>
namespace chromeos {
namespace local_search_service {
LocalSearchServiceProviderForTestting::LocalSearchServiceProviderForTestting() {
LocalSearchServiceProvider::Set(this);
}
LocalSearchServiceProviderForTestting::
~LocalSearchServiceProviderForTestting() {
LocalSearchServiceProvider::Set(nullptr);
}
void LocalSearchServiceProviderForTestting::BindLocalSearchService(
mojo::PendingReceiver<mojom::LocalSearchService> receiver) {
service_ = std::make_unique<LocalSearchService>(std::move(receiver));
}
} // namespace local_search_service
} // namespace chromeos
// Copyright 2020 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 CHROMEOS_COMPONENTS_LOCAL_SEARCH_SERVICE_LOCAL_SEARCH_SERVICE_PROVIDER_FOR_TESTING_H_
#define CHROMEOS_COMPONENTS_LOCAL_SEARCH_SERVICE_LOCAL_SEARCH_SERVICE_PROVIDER_FOR_TESTING_H_
#include "chromeos/components/local_search_service/local_search_service.h"
#include "chromeos/components/local_search_service/public/cpp/local_search_service_provider.h"
namespace chromeos {
namespace local_search_service {
// An implementation that runs LocalSearchService in-process for testing
// purpose.
class LocalSearchServiceProviderForTestting
: public LocalSearchServiceProvider {
public:
LocalSearchServiceProviderForTestting();
~LocalSearchServiceProviderForTestting() override;
// LocalSearchServiceProvider:
void BindLocalSearchService(
mojo::PendingReceiver<mojom::LocalSearchService> receiver) override;
private:
std::unique_ptr<LocalSearchService> service_;
};
} // namespace local_search_service
} // namespace chromeos
#endif // CHROMEOS_COMPONENTS_LOCAL_SEARCH_SERVICE_LOCAL_SEARCH_SERVICE_PROVIDER_FOR_TESTING_H_
// Copyright 2020 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 "chromeos/components/local_search_service/local_search_service_provider_for_testing.h"
#include <memory>
#include "base/test/task_environment.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chromeos {
namespace local_search_service {
class LocalSearchServiceProviderTest : public testing::Test {
public:
void SetUp() override {
provider_ = std::make_unique<LocalSearchServiceProviderForTestting>();
}
protected:
std::unique_ptr<LocalSearchServiceProvider> provider_;
base::test::TaskEnvironment task_environment_{
base::test::TaskEnvironment::MainThreadType::DEFAULT,
base::test::TaskEnvironment::ThreadPoolExecutionMode::QUEUED};
};
TEST_F(LocalSearchServiceProviderTest, SetUpAndRun) {
auto* provider = LocalSearchServiceProvider::Get();
mojo::Remote<mojom::LocalSearchService> service;
provider->BindLocalSearchService(service.BindNewPipeAndPassReceiver());
mojo::Remote<mojom::Index> index_remote;
// BindIndex
bool callback_done = false;
std::string error = "";
service->BindIndex(IndexId::kCrosSettings, Backend::kLinearMap,
index_remote.BindNewPipeAndPassReceiver(),
mojo::NullRemote(),
base::BindOnce(
[](bool* callback_done, std::string* error,
const base::Optional<std::string>& error_callback) {
*callback_done = true;
if (error_callback)
*error = error_callback.value();
},
&callback_done, &error));
task_environment_.RunUntilIdle();
ASSERT_TRUE(callback_done);
EXPECT_EQ(error, "");
// GetSize
callback_done = false;
uint32_t num_items = 0;
index_remote->GetSize(base::BindOnce(
[](bool* callback_done, uint32_t* num_items, uint64_t size) {
*callback_done = true;
*num_items = size;
},
&callback_done, &num_items));
task_environment_.RunUntilIdle();
ASSERT_TRUE(callback_done);
EXPECT_EQ(num_items, 0u);
}
} // namespace local_search_service
} // namespace chromeos
// Copyright 2020 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 "chromeos/components/local_search_service/oop_local_search_service_provider.h"
#include "content/public/browser/service_process_host.h"
namespace chromeos {
namespace local_search_service {
OopLocalSearchServiceProvider::OopLocalSearchServiceProvider() {
LocalSearchServiceProvider::Set(this);
}
OopLocalSearchServiceProvider::~OopLocalSearchServiceProvider() {
LocalSearchServiceProvider::Set(nullptr);
}
void OopLocalSearchServiceProvider::BindLocalSearchService(
mojo::PendingReceiver<mojom::LocalSearchService> receiver) {
content::ServiceProcessHost::Launch(
std::move(receiver), content::ServiceProcessHost::Options()
.WithDisplayName("Local Search Service")
.Pass());
}
} // namespace local_search_service
} // namespace chromeos
// Copyright 2020 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 CHROMEOS_COMPONENTS_LOCAL_SEARCH_SERVICE_OOP_LOCAL_SEARCH_SERVICE_PROVIDER_H_
#define CHROMEOS_COMPONENTS_LOCAL_SEARCH_SERVICE_OOP_LOCAL_SEARCH_SERVICE_PROVIDER_H_
#include "chromeos/components/local_search_service/public/cpp/local_search_service_provider.h"
namespace chromeos {
namespace local_search_service {
// An implementation that runs LocalSearchService in the LSS service
// process.
class OopLocalSearchServiceProvider : public LocalSearchServiceProvider {
public:
OopLocalSearchServiceProvider();
~OopLocalSearchServiceProvider() override;
// LocalSearchServiceProvider:
void BindLocalSearchService(
mojo::PendingReceiver<mojom::LocalSearchService> receiver) override;
};
} // namespace local_search_service
} // namespace chromeos
#endif // CHROMEOS_COMPONENTS_LOCAL_SEARCH_SERVICE_OOP_LOCAL_SEARCH_SERVICE_PROVIDER_H_
# Copyright 2020 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.
assert(is_chromeos, "Non-ChromeOS builds cannot depend on //chromeos")
source_set("cpp") {
sources = [
"local_search_service_provider.cc",
"local_search_service_provider.h",
]
deps = [
"//chromeos/components/local_search_service:local_search_service",
"//chromeos/components/local_search_service/public/mojom",
]
}
// Copyright 2020 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 "chromeos/components/local_search_service/public/cpp/local_search_service_provider.h"
#include "chromeos/components/local_search_service/local_search_service.h"
namespace chromeos {
namespace local_search_service {
namespace {
LocalSearchServiceProvider* g_provider = nullptr;
} // namespace
void LocalSearchServiceProvider::Set(LocalSearchServiceProvider* provider) {
g_provider = provider;
}
LocalSearchServiceProvider* LocalSearchServiceProvider::Get() {
return g_provider;
}
} // namespace local_search_service
} // namespace chromeos
// Copyright 2020 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 CHROMEOS_COMPONENTS_LOCAL_SEARCH_SERVICE_PUBLIC_CPP_LOCAL_SEARCH_SERVICE_PROVIDER_H_
#define CHROMEOS_COMPONENTS_LOCAL_SEARCH_SERVICE_PUBLIC_CPP_LOCAL_SEARCH_SERVICE_PROVIDER_H_
#include "chromeos/components/local_search_service/public/mojom/local_search_service.mojom.h"
#include "mojo/public/cpp/bindings/remote_set.h"
namespace chromeos {
namespace local_search_service {
// LocalSearchServiceProvider creates an instance of LocalSearchService
// and runs in LSS service process or in process (depending on the
// implementation).
class LocalSearchServiceProvider {
public:
virtual ~LocalSearchServiceProvider() {}
// Sets the global LocalSearchServiceProvider instance.
// Specifically, there will be a global |g_provider| in this class' .cpp file
// and in the anonymous namespace. The Set function will set |g_provider| to
// the input |provider|.
// This function must be called before the service is requested.
static void Set(LocalSearchServiceProvider* provider);
static LocalSearchServiceProvider* Get();
// Binds |receiver| to an instance of the LocalSearchService.
// Each call to this method will request a new instance of the service.
virtual void BindLocalSearchService(
mojo::PendingReceiver<mojom::LocalSearchService> receiver) = 0;
};
} // namespace local_search_service
} // namespace chromeos
#endif // CHROMEOS_COMPONENTS_LOCAL_SEARCH_SERVICE_PUBLIC_CPP_LOCAL_SEARCH_SERVICE_PROVIDER_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment