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 CHROME_BROWSER_NEARBY_SHARING_CONTACTS_NEARBY_SHARE_CONTACT_DOWNLOADER_IMPL_H_ 6 #define CHROME_BROWSER_NEARBY_SHARING_CONTACTS_NEARBY_SHARE_CONTACT_DOWNLOADER_IMPL_H_ 7 8 #include <memory> 9 #include <string> 10 #include <vector> 11 12 #include "base/optional.h" 13 #include "base/time/time.h" 14 #include "base/timer/timer.h" 15 #include "chrome/browser/nearby_sharing/common/nearby_share_http_result.h" 16 #include "chrome/browser/nearby_sharing/contacts/nearby_share_contact_downloader.h" 17 #include "chrome/browser/nearby_sharing/proto/contact_rpc.pb.h" 18 #include "chrome/browser/nearby_sharing/proto/rpc_resources.pb.h" 19 20 class NearbyShareClient; 21 class NearbyShareClientFactory; 22 23 // An implementation of the NearbyShareContactDownloader that uses 24 // NearbyShareClients to make HTTP calls. This class enforces a timeout for all 25 // HTTP calls but does not retry failures. 26 // TODO(https://crbug.com/1114516): Use SimpleURLLoader timeout functionality 27 // after refactoring our Nearby Share HTTP client. 28 class NearbyShareContactDownloaderImpl : public NearbyShareContactDownloader { 29 public: 30 class Factory { 31 public: 32 static std::unique_ptr<NearbyShareContactDownloader> Create( 33 const std::string& device_id, 34 base::TimeDelta timeout, 35 NearbyShareClientFactory* client_factory, 36 SuccessCallback success_callback, 37 FailureCallback failure_callback); 38 static void SetFactoryForTesting(Factory* test_factory); 39 40 protected: 41 virtual ~Factory(); 42 virtual std::unique_ptr<NearbyShareContactDownloader> CreateInstance( 43 const std::string& device_id, 44 base::TimeDelta timeout, 45 NearbyShareClientFactory* client_factory, 46 SuccessCallback success_callback, 47 FailureCallback failure_callback) = 0; 48 49 private: 50 static Factory* test_factory_; 51 }; 52 53 ~NearbyShareContactDownloaderImpl() override; 54 55 private: 56 // |timeout|: The maximum amount of time to wait between the request and 57 // response of each HTTP call before failing. 58 NearbyShareContactDownloaderImpl(const std::string& device_id, 59 base::TimeDelta timeout, 60 NearbyShareClientFactory* client_factory, 61 SuccessCallback success_callback, 62 FailureCallback failure_callback); 63 64 // NearbyShareContactDownloader: 65 void OnRun() override; 66 67 void CallListContactPeople( 68 const base::Optional<std::string>& next_page_token); 69 void OnListContactPeopleSuccess( 70 const nearbyshare::proto::ListContactPeopleResponse& response); 71 void OnListContactPeopleFailure(NearbyShareHttpError error); 72 void OnListContactPeopleTimeout(); 73 74 size_t current_page_number_ = 0; 75 std::vector<nearbyshare::proto::ContactRecord> contacts_; 76 base::TimeDelta timeout_; 77 NearbyShareClientFactory* client_factory_ = nullptr; 78 std::unique_ptr<NearbyShareClient> client_; 79 base::OneShotTimer timer_; 80 }; 81 82 #endif // CHROME_BROWSER_NEARBY_SHARING_CONTACTS_NEARBY_SHARE_CONTACT_DOWNLOADER_IMPL_H_ 83