// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromeos/ash/components/drivefs/drivefs_search.h"
#include <memory>
#include <utility>
#include "base/functional/callback.h"
#include "base/functional/callback_helpers.h"
#include "chromeos/ash/components/drivefs/drivefs_search_query.h"
#include "chromeos/ash/components/drivefs/mojom/drivefs.mojom.h"
#include "services/network/public/cpp/network_connection_tracker.h"
namespace drivefs {
namespace {
constexpr base::TimeDelta kQueryCacheTtl = base::Minutes(5);
} // namespace
DriveFsSearch::DriveFsSearch(
mojom::DriveFs* drivefs,
network::NetworkConnectionTracker* network_connection_tracker,
const base::Clock* clock)
: drivefs_(drivefs),
network_connection_tracker_(network_connection_tracker),
clock_(clock) {}
DriveFsSearch::~DriveFsSearch() = default;
std::unique_ptr<DriveFsSearchQuery> DriveFsSearch::CreateQuery(
mojom::QueryParametersPtr query_params) {
return std::make_unique<DriveFsSearchQuery>(weak_ptr_factory_.GetWeakPtr(),
std::move(query_params));
}
mojom::QueryParameters::QuerySource DriveFsSearch::PerformSearch(
mojom::QueryParametersPtr query,
mojom::SearchQuery::GetNextPageCallback callback) {
std::unique_ptr<DriveFsSearchQuery> search_query =
CreateQuery(std::move(query));
drivefs::mojom::QueryParameters::QuerySource source = search_query->source();
DriveFsSearchQuery* raw_search_query = search_query.get();
// Keep `search_query` alive until `GetNextPage` finishes running.
raw_search_query->GetNextPage(std::move(callback).Then(base::OnceClosure(
base::DoNothingWithBoundArgs(std::move(search_query)))));
return source;
}
void DriveFsSearch::UpdateLastSharedWithMeResponse() {
last_shared_with_me_response_ = clock_->Now();
}
bool DriveFsSearch::WithinQueryCacheTtl() {
return clock_->Now() - last_shared_with_me_response_ <= kQueryCacheTtl;
}
bool DriveFsSearch::IsOffline() {
return network_connection_tracker_->IsOffline();
}
void DriveFsSearch::StartMojoSearchQuery(
mojo::PendingReceiver<mojom::SearchQuery> query,
mojom::QueryParametersPtr query_params) {
drivefs_->StartSearchQuery(std::move(query), std::move(query_params));
}
} // namespace drivefs