blob: 17203e897baca900789734c694b08244ddccec83 [file] [log] [blame]
// Copyright 2021 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 GOOGLE_APIS_CALENDAR_CALENDAR_API_REQUESTS_H_
#define GOOGLE_APIS_CALENDAR_CALENDAR_API_REQUESTS_H_
#include "google_apis/calendar/calendar_api_response_types.h"
#include "google_apis/calendar/calendar_api_url_generator.h"
#include "google_apis/common/api_error_codes.h"
#include "google_apis/common/base_requests.h"
namespace google_apis {
namespace calendar {
// Callback used for requests that the server returns Events data
// formatted into JSON value.
using CalendarEventListCallback =
base::OnceCallback<void(ApiErrorCode error,
std::unique_ptr<EventList> events)>;
// This is base class of the Calendar API related requests.
class CalendarApiGetRequest : public UrlFetchRequestBase {
public:
// `fields` is an optional request parameter that allows you to specify the
// fields you want returned in the response data. Documentation:
// https://developers.google.com/calendar/api/guides/performance?hl=en#partial-response
CalendarApiGetRequest(RequestSender* sender, const std::string& fields);
CalendarApiGetRequest(const CalendarApiGetRequest&) = delete;
CalendarApiGetRequest& operator=(const CalendarApiGetRequest&) = delete;
~CalendarApiGetRequest() override;
protected:
// UrlFetchRequestBase:
GURL GetURL() const override;
ApiErrorCode MapReasonToError(ApiErrorCode code,
const std::string& reason) override;
bool IsSuccessfulErrorCode(ApiErrorCode error) override;
// Derived classes should override GetURLInternal instead of GetURL()
// directly since fields are appended in the GetURL() method.
virtual GURL GetURLInternal() const = 0;
private:
// Optional parameter in the request.
std::string fields_;
};
// Request to fetch calendar events.
class CalendarApiEventsRequest : public CalendarApiGetRequest {
public:
CalendarApiEventsRequest(RequestSender* sender,
const CalendarApiUrlGenerator& url_generator,
CalendarEventListCallback callback,
const base::Time& start_time,
const base::Time& end_time);
CalendarApiEventsRequest(const CalendarApiEventsRequest&) = delete;
CalendarApiEventsRequest& operator=(const CalendarApiEventsRequest&) = delete;
~CalendarApiEventsRequest() override;
protected:
// CalendarApiGetRequest:
GURL GetURLInternal() const override;
// UrlFetchRequestBase:
void ProcessURLFetchResults(
const network::mojom::URLResponseHead* response_head,
const base::FilePath response_file,
std::string response_body) override;
void RunCallbackOnPrematureFailure(ApiErrorCode code) override;
private:
// Parses the |json| string to EventList.
static std::unique_ptr<EventList> Parse(std::string json);
// Receives the parsed result and invokes the callback.
void OnDataParsed(ApiErrorCode error, std::unique_ptr<EventList> events);
CalendarEventListCallback callback_;
const CalendarApiUrlGenerator url_generator_;
const base::Time start_time_;
const base::Time end_time_;
// Note: This should remain the last member so it'll be destroyed and
// invalidate its weak pointers before any other members are destroyed.
base::WeakPtrFactory<CalendarApiEventsRequest> weak_ptr_factory_{this};
};
} // namespace calendar
} // namespace google_apis
#endif // GOOGLE_APIS_CALENDAR_CALENDAR_API_REQUESTS_H_