[go: nahoru, domu]

blob: fca156b5a9ac70164c8cd15399db9948903deae5 [file] [log] [blame]
// 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 COMPONENTS_FEED_CORE_V2_TASKS_LOAD_MORE_TASK_H_
#define COMPONENTS_FEED_CORE_V2_TASKS_LOAD_MORE_TASK_H_
#include <memory>
#include "base/callback.h"
#include "base/memory/weak_ptr.h"
#include "base/time/time.h"
#include "components/feed/core/proto/v2/store.pb.h"
#include "components/feed/core/proto/v2/wire/response.pb.h"
#include "components/feed/core/v2/enums.h"
#include "components/feed/core/v2/feed_network.h"
#include "components/feed/core/v2/scheduling.h"
#include "components/feed/core/v2/tasks/upload_actions_task.h"
#include "components/offline_pages/task/task.h"
#include "components/version_info/channel.h"
namespace feed {
class FeedStream;
// Fetches additional content from the network when the model is already loaded.
// Unlike |LoadStreamTask|, this task does not directly persist data to
// |FeedStore|. Instead, |StreamModel| handles persisting the additional
// content.
class LoadMoreTask : public offline_pages::Task {
public:
struct Result {
Result();
~Result();
Result(Result&&);
Result& operator=(Result&&);
Result(const Result&) = delete;
Result& operator=(const Result&) = delete;
StreamType stream_type;
// Final status of loading the stream.
LoadStreamStatus final_status = LoadStreamStatus::kNoStatus;
bool loaded_new_content_from_network = false;
absl::optional<RequestSchedule> request_schedule;
std::unique_ptr<StreamModelUpdateRequest> model_update_request;
};
LoadMoreTask(const StreamType& stream_type,
FeedStream* stream,
base::OnceCallback<void(Result)> done_callback);
~LoadMoreTask() override;
LoadMoreTask(const LoadMoreTask&) = delete;
LoadMoreTask& operator=(const LoadMoreTask&) = delete;
private:
void Run() override;
base::WeakPtr<LoadMoreTask> GetWeakPtr() {
return weak_ptr_factory_.GetWeakPtr();
}
void UploadActionsComplete(UploadActionsTask::Result result);
void QueryApiRequestComplete(
FeedNetwork::ApiResult<feedwire::Response> result);
void QueryRequestComplete(FeedNetwork::QueryRequestResult result);
void ProcessNetworkResponse(std::unique_ptr<feedwire::Response> response_body,
NetworkResponseInfo response_info);
void Done(LoadStreamStatus status);
StreamType stream_type_;
FeedStream& stream_; // Unowned.
base::TimeTicks fetch_start_time_;
std::unique_ptr<UploadActionsTask> upload_actions_task_;
Result result_;
base::OnceCallback<void(Result)> done_callback_;
base::WeakPtrFactory<LoadMoreTask> weak_ptr_factory_{this};
};
} // namespace feed
#endif // COMPONENTS_FEED_CORE_V2_TASKS_LOAD_MORE_TASK_H_