1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef COMPONENTS_FEED_CORE_V2_FEED_NETWORK_H_
6 #define COMPONENTS_FEED_CORE_V2_FEED_NETWORK_H_
7 
8 #include <memory>
9 
10 #include "base/callback.h"
11 #include "components/feed/core/v2/public/types.h"
12 
13 namespace feedwire {
14 class UploadActionsResponse;
15 class UploadActionsRequest;
16 class Request;
17 class Response;
18 }  // namespace feedwire
19 
20 namespace feed {
21 
22 class FeedNetwork {
23  public:
24   // Result of SendQueryRequest.
25   struct QueryRequestResult {
26     QueryRequestResult();
27     ~QueryRequestResult();
28     QueryRequestResult(QueryRequestResult&&);
29     QueryRequestResult& operator=(QueryRequestResult&&);
30     NetworkResponseInfo response_info;
31     // Response body if one was received.
32     std::unique_ptr<feedwire::Response> response_body;
33     // Whether the request was signed in.
34     bool was_signed_in;
35   };
36 
37   // Result of SendActionRequest.
38   struct ActionRequestResult {
39     ActionRequestResult();
40     ~ActionRequestResult();
41     ActionRequestResult(ActionRequestResult&&);
42     ActionRequestResult& operator=(ActionRequestResult&&);
43     NetworkResponseInfo response_info;
44     // Response body if one was received.
45     std::unique_ptr<feedwire::UploadActionsResponse> response_body;
46   };
47 
48   virtual ~FeedNetwork();
49 
50   // Send a feedwire::Request, and receive the response in |callback|.
51   // |callback| will be called unless the request is canceled with
52   // |CancelRequests()|.
53   virtual void SendQueryRequest(
54       const feedwire::Request& request,
55       bool force_signed_out_request,
56       base::OnceCallback<void(QueryRequestResult)> callback) = 0;
57 
58   // Send a feedwire::UploadActionsRequest, and receive the response in
59   // |callback|. |callback| will be called unless the request is canceled with
60   // |CancelRequests()|.
61   virtual void SendActionRequest(
62       const feedwire::UploadActionsRequest& request,
63       base::OnceCallback<void(ActionRequestResult)> callback) = 0;
64 
65   // Cancels all pending requests immediately. This could be used, for example,
66   // if there are pending requests for a user who just signed out.
67   virtual void CancelRequests() = 0;
68 };
69 
70 }  // namespace feed
71 
72 #endif  // COMPONENTS_FEED_CORE_V2_FEED_NETWORK_H_
73