calendar_api_requests.h 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. // Copyright 2021 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. #ifndef GOOGLE_APIS_CALENDAR_CALENDAR_API_REQUESTS_H_
  5. #define GOOGLE_APIS_CALENDAR_CALENDAR_API_REQUESTS_H_
  6. #include "base/time/time.h"
  7. #include "google_apis/calendar/calendar_api_response_types.h"
  8. #include "google_apis/calendar/calendar_api_url_generator.h"
  9. #include "google_apis/common/api_error_codes.h"
  10. #include "google_apis/common/base_requests.h"
  11. namespace google_apis {
  12. namespace calendar {
  13. // Callback used for requests that the server returns Events data
  14. // formatted into JSON value.
  15. using CalendarEventListCallback =
  16. base::OnceCallback<void(ApiErrorCode error,
  17. std::unique_ptr<EventList> events)>;
  18. // This is base class of the Calendar API related requests.
  19. class CalendarApiGetRequest : public UrlFetchRequestBase {
  20. public:
  21. // `fields` is an optional request parameter that allows you to specify the
  22. // fields you want returned in the response data. Documentation:
  23. // https://developers.google.com/calendar/api/guides/performance?hl=en#partial-response
  24. CalendarApiGetRequest(RequestSender* sender, const std::string& fields);
  25. CalendarApiGetRequest(const CalendarApiGetRequest&) = delete;
  26. CalendarApiGetRequest& operator=(const CalendarApiGetRequest&) = delete;
  27. ~CalendarApiGetRequest() override;
  28. protected:
  29. // UrlFetchRequestBase:
  30. GURL GetURL() const override;
  31. ApiErrorCode MapReasonToError(ApiErrorCode code,
  32. const std::string& reason) override;
  33. bool IsSuccessfulErrorCode(ApiErrorCode error) override;
  34. // Derived classes should override GetURLInternal instead of GetURL()
  35. // directly since fields are appended in the GetURL() method.
  36. virtual GURL GetURLInternal() const = 0;
  37. private:
  38. // Optional parameter in the request.
  39. std::string fields_;
  40. };
  41. // Request to fetch calendar events.
  42. class CalendarApiEventsRequest : public CalendarApiGetRequest {
  43. public:
  44. CalendarApiEventsRequest(RequestSender* sender,
  45. const CalendarApiUrlGenerator& url_generator,
  46. CalendarEventListCallback callback,
  47. const base::Time& start_time,
  48. const base::Time& end_time);
  49. CalendarApiEventsRequest(const CalendarApiEventsRequest&) = delete;
  50. CalendarApiEventsRequest& operator=(const CalendarApiEventsRequest&) = delete;
  51. ~CalendarApiEventsRequest() override;
  52. protected:
  53. // CalendarApiGetRequest:
  54. GURL GetURLInternal() const override;
  55. // UrlFetchRequestBase:
  56. void ProcessURLFetchResults(
  57. const network::mojom::URLResponseHead* response_head,
  58. const base::FilePath response_file,
  59. std::string response_body) override;
  60. void RunCallbackOnPrematureFailure(ApiErrorCode code) override;
  61. private:
  62. // Parses the |json| string to EventList.
  63. static std::unique_ptr<EventList> Parse(std::string json);
  64. // Receives the parsed result and invokes the callback.
  65. void OnDataParsed(ApiErrorCode error, std::unique_ptr<EventList> events);
  66. CalendarEventListCallback callback_;
  67. const CalendarApiUrlGenerator url_generator_;
  68. const base::Time start_time_;
  69. const base::Time end_time_;
  70. // Note: This should remain the last member so it'll be destroyed and
  71. // invalidate its weak pointers before any other members are destroyed.
  72. base::WeakPtrFactory<CalendarApiEventsRequest> weak_ptr_factory_{this};
  73. };
  74. } // namespace calendar
  75. } // namespace google_apis
  76. #endif // GOOGLE_APIS_CALENDAR_CALENDAR_API_REQUESTS_H_