blob: e6442fc7e1535844d0db5398688a6e7225efeca1 [file] [log] [blame]
// Copyright 2018 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 <vector>
#include "chrome/browser/android/explore_sites/explore_sites_store.h"
#include "chrome/browser/android/explore_sites/explore_sites_types.h"
#include "components/offline_pages/task/task.h"
using offline_pages::Task;
namespace explore_sites {
// A task that can retrieve the catalog from the ExploreSitesStore. Also
// responsible for clearing old catalogs from the store, if created with
// |update_current| set.
// If |update_current| is set, this task:
// * Checks for the existence of |downloading_version| in the meta table.
// * If there is one, updates |current_version| = |downloading_version|
// * Removes all catalog data for rows not matching |current_version|.
// * Returns the current catalog.
// If |update_current| is not set, this task:
// * Returns any catalog with version |current_version|
// * If no |current_version|, returns catalog with version 0 (to support
// GetCategories if necessary)
// * If no catalog with version 0, returns an empty catalog version
// In any case, if there is a DB error or version inconsistency, then returns
// |nullptr|.
class GetCatalogTask : public Task {
typedef std::vector<ExploreSitesCategory> CategoryList;
GetCatalogTask(ExploreSitesStore* store,
bool update_current,
CatalogCallback callback);
~GetCatalogTask() override;
// Task implementation:
void Run() override;
void FinishedExecuting(
std::pair<GetCatalogStatus, std::unique_ptr<CategoryList>> result);
ExploreSitesStore* store_; // outlives this class.
bool update_current_;
CatalogCallback callback_;
base::WeakPtrFactory<GetCatalogTask> weak_ptr_factory_;
} // namespace explore_sites