15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#ifndef GOOGLE_APIS_DRIVE_DRIVE_API_REQUESTS_H_
6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define GOOGLE_APIS_DRIVE_DRIVE_API_REQUESTS_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback_forward.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/time/time.h"
12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/base_requests.h"
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/drive_api_url_generator.h"
14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/drive_common_callbacks.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace google_apis {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class ChangeList;
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FileResource;
20424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class FileList;
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Callback used for requests that the server returns FileResource data
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// formatted into JSON value.
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef base::Callback<void(GDataErrorCode error,
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            scoped_ptr<FileResource> entry)>
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    FileResourceCallback;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
28424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Callback used for requests that the server returns FileList data
29424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// formatted into JSON value.
30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)typedef base::Callback<void(GDataErrorCode error,
31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                            scoped_ptr<FileList> entry)> FileListCallback;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Callback used for requests that the server returns ChangeList data
34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// formatted into JSON value.
35424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)typedef base::Callback<void(GDataErrorCode error,
36424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                            scoped_ptr<ChangeList> entry)> ChangeListCallback;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)namespace drive {
39424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)//============================ DriveApiDataRequest ===========================
4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// This is base class of the Drive API related requests. All Drive API requests
4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// support partial request (to improve the performance). The function can be
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// shared among the Drive API requests.
4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// See also https://developers.google.com/drive/performance
4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class DriveApiDataRequest : public GetDataRequest {
4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public:
4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  DriveApiDataRequest(RequestSender* sender, const GetDataCallback& callback);
4968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual ~DriveApiDataRequest();
5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Optional parameter.
5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  const std::string& fields() const { return fields_; }
5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  void set_fields(const std::string& fields) { fields_ = fields; }
5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) protected:
5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Overridden from GetDataRequest.
5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual GURL GetURL() const OVERRIDE;
5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Derived classes should override GetURLInternal instead of GetURL()
6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // directly.
6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual GURL GetURLInternal() const = 0;
6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private:
6468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  std::string fields_;
6568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(DriveApiDataRequest);
6768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)};
6868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
69424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)//=============================== FilesGetRequest =============================
70424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
71424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This class performs the request for fetching a file.
72424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This request is mapped to
73424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/files/get
7468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class FilesGetRequest : public DriveApiDataRequest {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
76424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  FilesGetRequest(RequestSender* sender,
77868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                  const DriveApiUrlGenerator& url_generator,
78424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                  const FileResourceCallback& callback);
79424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual ~FilesGetRequest();
80424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
81424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Required parameter.
82424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const std::string& file_id() const { return file_id_; }
83424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_file_id(const std::string& file_id) { file_id_ = file_id; }
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
8668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Overridden from DriveApiDataRequest.
8768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual GURL GetURLInternal() const OVERRIDE;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const DriveApiUrlGenerator url_generator_;
91424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::string file_id_;
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
93424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FilesGetRequest);
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
96424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)//============================ FilesInsertRequest =============================
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
98424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This class performs the request for creating a resource.
99424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This request is mapped to
100424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/files/insert
101424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// See also https://developers.google.com/drive/manage-uploads and
102424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// https://developers.google.com/drive/folder
10368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class FilesInsertRequest : public DriveApiDataRequest {
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
105424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  FilesInsertRequest(RequestSender* sender,
106424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                     const DriveApiUrlGenerator& url_generator,
107424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                     const FileResourceCallback& callback);
108424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual ~FilesInsertRequest();
109424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
110424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Optional request body.
111424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const std::string& mime_type() const { return mime_type_; }
112424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_mime_type(const std::string& mime_type) {
113424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    mime_type_ = mime_type;
114424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
115424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
116424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const std::vector<std::string>& parents() const { return parents_; }
117424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void add_parent(const std::string& parent) { parents_.push_back(parent); }
118424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
119424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const std::string& title() const { return title_; }
120424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_title(const std::string& title) { title_ = title; }
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
123868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Overridden from GetDataRequest.
124424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
125424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual bool GetContentData(std::string* upload_content_type,
126424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                              std::string* upload_content) OVERRIDE;
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Overridden from DriveApiDataRequest.
12968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual GURL GetURLInternal() const OVERRIDE;
13068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const DriveApiUrlGenerator url_generator_;
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
134424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::string mime_type_;
135424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::vector<std::string> parents_;
136424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::string title_;
137424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
138424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FilesInsertRequest);
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
141424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)//============================== FilesPatchRequest ============================
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
143424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This class performs the request for patching file metadata.
144424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This request is mapped to
145424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/files/patch
14668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class FilesPatchRequest : public DriveApiDataRequest {
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
148424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  FilesPatchRequest(RequestSender* sender,
149424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                    const DriveApiUrlGenerator& url_generator,
150424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                    const FileResourceCallback& callback);
151424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual ~FilesPatchRequest();
152424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
153424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Required parameter.
154424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const std::string& file_id() const { return file_id_; }
155424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_file_id(const std::string& file_id) { file_id_ = file_id; }
156424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
157424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Optional parameter.
158424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  bool set_modified_date() const { return set_modified_date_; }
159424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_set_modified_date(bool set_modified_date) {
160424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    set_modified_date_ = set_modified_date;
161424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
162424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
163424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  bool update_viewed_date() const { return update_viewed_date_; }
164424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_update_viewed_date(bool update_viewed_date) {
165424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    update_viewed_date_ = update_viewed_date;
166424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
167424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
168424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Optional request body.
169424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Note: "Files: patch" accepts any "Files resource" data, but this class
170424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // only supports limited members of it for now. We can extend it upon
171424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // requirments.
172424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const std::string& title() const { return title_; }
173424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_title(const std::string& title) { title_ = title; }
174424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
175424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const base::Time& modified_date() const { return modified_date_; }
176424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_modified_date(const base::Time& modified_date) {
177424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    modified_date_ = modified_date;
178424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
179424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
180424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const base::Time& last_viewed_by_me_date() const {
181424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    return last_viewed_by_me_date_;
182424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
183424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_last_viewed_by_me_date(const base::Time& last_viewed_by_me_date) {
184424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    last_viewed_by_me_date_ = last_viewed_by_me_date;
185424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
186424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
187424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const std::vector<std::string>& parents() const { return parents_; }
188424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void add_parent(const std::string& parent) { parents_.push_back(parent); }
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
19168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Overridden from URLFetchRequestBase.
192424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
193424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE;
194424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual bool GetContentData(std::string* upload_content_type,
195424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                              std::string* upload_content) OVERRIDE;
196424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
19768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Overridden from DriveApiDataRequest.
19868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual GURL GetURLInternal() const OVERRIDE;
19968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
200424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private:
201424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const DriveApiUrlGenerator url_generator_;
202424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
203424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::string file_id_;
204424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  bool set_modified_date_;
205424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  bool update_viewed_date_;
206424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
207424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::string title_;
208424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::Time modified_date_;
209424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::Time last_viewed_by_me_date_;
210424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::vector<std::string> parents_;
211424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
212424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FilesPatchRequest);
213424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)};
214424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
215424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)//============================= FilesCopyRequest ==============================
216424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
217424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This class performs the request for copying a resource.
218424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This request is mapped to
219424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/files/copy
22068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class FilesCopyRequest : public DriveApiDataRequest {
221424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public:
222424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Upon completion, |callback| will be called. |callback| must not be null.
223424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  FilesCopyRequest(RequestSender* sender,
224424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                   const DriveApiUrlGenerator& url_generator,
225424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                   const FileResourceCallback& callback);
226424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual ~FilesCopyRequest();
227424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
228424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Required parameter.
229424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const std::string& file_id() const { return file_id_; }
230424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_file_id(const std::string& file_id) { file_id_ = file_id; }
231424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
232424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Optional request body.
233424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const std::vector<std::string>& parents() const { return parents_; }
234424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void add_parent(const std::string& parent) { parents_.push_back(parent); }
235424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
23668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  const base::Time& modified_date() const { return modified_date_; }
23768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  void set_modified_date(const base::Time& modified_date) {
23868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    modified_date_ = modified_date;
23968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
24068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
241424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const std::string& title() const { return title_; }
242424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_title(const std::string& title) { title_ = title; }
243424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
244424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) protected:
24568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Overridden from URLFetchRequestBase.
246424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
247424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual bool GetContentData(std::string* upload_content_type,
248424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                              std::string* upload_content) OVERRIDE;
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Overridden from DriveApiDataRequest.
25168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual GURL GetURLInternal() const OVERRIDE;
25268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const DriveApiUrlGenerator url_generator_;
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
256424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::string file_id_;
25768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  base::Time modified_date_;
258424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::vector<std::string> parents_;
259424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::string title_;
260424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
261424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FilesCopyRequest);
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
264424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)//============================= FilesListRequest =============================
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
266424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This class performs the request for fetching FileList.
267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// The result may contain only first part of the result. The remaining result
268424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// should be able to be fetched by ContinueGetFileListRequest defined below,
269424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// or by FilesListRequest with setting page token.
270424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This request is mapped to
271424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/files/list
27268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class FilesListRequest : public DriveApiDataRequest {
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
274424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  FilesListRequest(RequestSender* sender,
275424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                   const DriveApiUrlGenerator& url_generator,
276424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                   const FileListCallback& callback);
277424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual ~FilesListRequest();
278424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
279424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Optional parameter
280424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  int max_results() const { return max_results_; }
281424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_max_results(int max_results) { max_results_ = max_results; }
282424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
283424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const std::string& page_token() const { return page_token_; }
284424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_page_token(const std::string& page_token) {
285424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    page_token_ = page_token;
286424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
287424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
288424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const std::string& q() const { return q_; }
289424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_q(const std::string& q) { q_ = q; }
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
29268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Overridden from DriveApiDataRequest.
29368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual GURL GetURLInternal() const OVERRIDE;
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const DriveApiUrlGenerator url_generator_;
297424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  int max_results_;
298424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::string page_token_;
299424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::string q_;
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
301424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FilesListRequest);
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//========================= FilesListNextPageRequest ==========================
30558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
30658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// There are two ways to obtain next pages of "Files: list" result (if paged).
30758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// 1) Set pageToken and all params used for the initial request.
30858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// 2) Use URL in the nextLink field in the previous response.
30958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// This class implements 2)'s request.
31068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class FilesListNextPageRequest : public DriveApiDataRequest {
31158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public:
31258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  FilesListNextPageRequest(RequestSender* sender,
31358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                           const FileListCallback& callback);
31458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual ~FilesListNextPageRequest();
31558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
31658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  const GURL& next_link() const { return next_link_; }
31758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void set_next_link(const GURL& next_link) { next_link_ = next_link; }
31858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
31958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected:
32068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Overridden from DriveApiDataRequest.
32168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual GURL GetURLInternal() const OVERRIDE;
32258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
32358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private:
32458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  GURL next_link_;
32558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
32658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FilesListNextPageRequest);
32758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
32858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
329d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)//============================= FilesDeleteRequest =============================
330d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)
331d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)// This class performs the request for deleting a resource.
332d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)// This request is mapped to
333d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/files/delete
334d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)class FilesDeleteRequest : public EntryActionRequest {
335d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) public:
336d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  FilesDeleteRequest(RequestSender* sender,
337d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)                     const DriveApiUrlGenerator& url_generator,
338d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)                     const EntryActionCallback& callback);
339d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  virtual ~FilesDeleteRequest();
340d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)
341d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  // Required parameter.
342d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  const std::string& file_id() const { return file_id_; }
343d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  void set_file_id(const std::string& file_id) { file_id_ = file_id; }
344d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  void set_etag(const std::string& etag) { etag_ = etag; }
345d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)
346d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) protected:
347d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  // Overridden from UrlFetchRequestBase.
348d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
349d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  virtual GURL GetURL() const OVERRIDE;
350d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE;
351d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)
352d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) private:
353d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  const DriveApiUrlGenerator url_generator_;
354d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  std::string file_id_;
355d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  std::string etag_;
356d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)
357d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FilesDeleteRequest);
358d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)};
359d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)
360d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)//============================= FilesTrashRequest ==============================
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
362424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This class performs the request for trashing a resource.
363424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This request is mapped to
364424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/files/trash
36568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class FilesTrashRequest : public DriveApiDataRequest {
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
367424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  FilesTrashRequest(RequestSender* sender,
368424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                    const DriveApiUrlGenerator& url_generator,
369424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                    const FileResourceCallback& callback);
370424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual ~FilesTrashRequest();
371424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
372424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Required parameter.
373424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const std::string& file_id() const { return file_id_; }
374424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_file_id(const std::string& file_id) { file_id_ = file_id; }
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
37768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Overridden from UrlFetchRequestBase.
378424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
37968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
38068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Overridden from DriveApiDataRequest.
38168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual GURL GetURLInternal() const OVERRIDE;
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const DriveApiUrlGenerator url_generator_;
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string file_id_;
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
387424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FilesTrashRequest);
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
390424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)//============================== AboutGetRequest =============================
391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
392424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This class performs the request for fetching About data.
393424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This request is mapped to
394424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/about/get
39568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class AboutGetRequest : public DriveApiDataRequest {
396c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
397424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  AboutGetRequest(RequestSender* sender,
398424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                  const DriveApiUrlGenerator& url_generator,
399424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                  const AboutResourceCallback& callback);
400424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual ~AboutGetRequest();
401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
402c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected:
40368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Overridden from DriveApiDataRequest.
40468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual GURL GetURLInternal() const OVERRIDE;
405c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
406c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
407424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const DriveApiUrlGenerator url_generator_;
408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
409424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AboutGetRequest);
410424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)};
411424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
412424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)//============================ ChangesListRequest ============================
413424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
414424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This class performs the request for fetching ChangeList.
415424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// The result may contain only first part of the result. The remaining result
416424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// should be able to be fetched by ContinueGetFileListRequest defined below.
417424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// or by ChangesListRequest with setting page token.
418424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This request is mapped to
419424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/changes/list
42068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class ChangesListRequest : public DriveApiDataRequest {
421424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public:
422424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ChangesListRequest(RequestSender* sender,
423424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                     const DriveApiUrlGenerator& url_generator,
424424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                     const ChangeListCallback& callback);
425424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual ~ChangesListRequest();
426424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
427424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Optional parameter
428424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  bool include_deleted() const { return include_deleted_; }
429424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_include_deleted(bool include_deleted) {
430424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    include_deleted_ = include_deleted;
431424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
432424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
433424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  int max_results() const { return max_results_; }
434424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_max_results(int max_results) { max_results_ = max_results; }
435424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
436424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const std::string& page_token() const { return page_token_; }
437424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_page_token(const std::string& page_token) {
438424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    page_token_ = page_token;
439424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
440424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
441424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  int64 start_change_id() const { return start_change_id_; }
442424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_start_change_id(int64 start_change_id) {
443424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    start_change_id_ = start_change_id;
444424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
445424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
446424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) protected:
44768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Overridden from DriveApiDataRequest.
44868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual GURL GetURLInternal() const OVERRIDE;
449424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
450424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private:
451424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const DriveApiUrlGenerator url_generator_;
452424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  bool include_deleted_;
453424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  int max_results_;
454424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::string page_token_;
455424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  int64 start_change_id_;
456424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
457424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChangesListRequest);
458c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
459c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
46058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//======================== ChangesListNextPageRequest =========================
46158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
46258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// There are two ways to obtain next pages of "Changes: list" result (if paged).
46358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// 1) Set pageToken and all params used for the initial request.
46458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// 2) Use URL in the nextLink field in the previous response.
46558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// This class implements 2)'s request.
46668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class ChangesListNextPageRequest : public DriveApiDataRequest {
46758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public:
46858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ChangesListNextPageRequest(RequestSender* sender,
46958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                             const ChangeListCallback& callback);
47058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual ~ChangesListNextPageRequest();
47158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
47258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  const GURL& next_link() const { return next_link_; }
47358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void set_next_link(const GURL& next_link) { next_link_ = next_link; }
47458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
47558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected:
47668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Overridden from DriveApiDataRequest.
47768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual GURL GetURLInternal() const OVERRIDE;
47858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
47958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private:
48058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  GURL next_link_;
48158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
48258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChangesListNextPageRequest);
48358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
48458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
485424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)//============================= AppsListRequest ============================
4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
487424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This class performs the request for fetching AppList.
488424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This request is mapped to
489424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/apps/list
49068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class AppsListRequest : public DriveApiDataRequest {
4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
492424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  AppsListRequest(RequestSender* sender,
493424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                  const DriveApiUrlGenerator& url_generator,
494424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                  const AppListCallback& callback);
495424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual ~AppsListRequest();
4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
49868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Overridden from DriveApiDataRequest.
49968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual GURL GetURLInternal() const OVERRIDE;
5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const DriveApiUrlGenerator url_generator_;
5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
504424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AppsListRequest);
505424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)};
506424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
50758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//========================== ChildrenInsertRequest ============================
508424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
50958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// This class performs the request for inserting a resource to a directory.
51058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// This request is mapped to
51158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// https://developers.google.com/drive/v2/reference/children/insert
51258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class ChildrenInsertRequest : public EntryActionRequest {
513424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public:
51458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ChildrenInsertRequest(RequestSender* sender,
51558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                        const DriveApiUrlGenerator& url_generator,
51658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                        const EntryActionCallback& callback);
51758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual ~ChildrenInsertRequest();
5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
51958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Required parameter.
52058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  const std::string& folder_id() const { return folder_id_; }
52158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void set_folder_id(const std::string& folder_id) {
52258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    folder_id_ = folder_id;
52358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
52490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
52558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Required body.
52658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  const std::string& id() const { return id_; }
52758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void set_id(const std::string& id) { id_ = id; }
52890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
52990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) protected:
530868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // UrlFetchRequestBase overrides.
53190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
53290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual GURL GetURL() const OVERRIDE;
53390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual bool GetContentData(std::string* upload_content_type,
53490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                              std::string* upload_content) OVERRIDE;
53590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
53690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) private:
53790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const DriveApiUrlGenerator url_generator_;
53858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  std::string folder_id_;
53958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  std::string id_;
54090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
54158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChildrenInsertRequest);
5423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)};
5433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
54458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//========================== ChildrenDeleteRequest ============================
5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
54658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// This class performs the request for removing a resource from a directory.
54758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// This request is mapped to
54858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// https://developers.google.com/drive/v2/reference/children/delete
54958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class ChildrenDeleteRequest : public EntryActionRequest {
5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |callback| must not be null.
55258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ChildrenDeleteRequest(RequestSender* sender,
553eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                        const DriveApiUrlGenerator& url_generator,
554eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                        const EntryActionCallback& callback);
55558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual ~ChildrenDeleteRequest();
5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
55758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Required parameter.
55858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  const std::string& child_id() const { return child_id_; }
55958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void set_child_id(const std::string& child_id) {
56058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    child_id_ = child_id;
56158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
56358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  const std::string& folder_id() const { return folder_id_; }
56458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void set_folder_id(const std::string& folder_id) {
56558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    folder_id_ = folder_id;
56658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
569868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // UrlFetchRequestBase overrides.
5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
57158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual GURL GetURL() const OVERRIDE;
5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const DriveApiUrlGenerator url_generator_;
57558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  std::string child_id_;
57658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  std::string folder_id_;
5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
57858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChildrenDeleteRequest);
5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
581868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)//======================= InitiateUploadNewFileRequest =======================
5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
583868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// This class performs the request for initiating the upload of a new file.
584868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class InitiateUploadNewFileRequest : public InitiateUploadRequestBase {
5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |parent_resource_id| should be the resource id of the parent directory.
5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |title| should be set.
588868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // See also the comments of InitiateUploadRequestBase for more details
5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // about the other parameters.
590eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  InitiateUploadNewFileRequest(RequestSender* sender,
591eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                               const DriveApiUrlGenerator& url_generator,
592eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                               const std::string& content_type,
593eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                               int64 content_length,
594eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                               const std::string& parent_resource_id,
595eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                               const std::string& title,
596eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                               const InitiateUploadCallback& callback);
597868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual ~InitiateUploadNewFileRequest();
5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
600868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // UrlFetchRequestBase overrides.
6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual GURL GetURL() const OVERRIDE;
6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool GetContentData(std::string* upload_content_type,
6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              std::string* upload_content) OVERRIDE;
6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const DriveApiUrlGenerator url_generator_;
6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::string parent_resource_id_;
6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::string title_;
6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
611868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(InitiateUploadNewFileRequest);
6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
614868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)//==================== InitiateUploadExistingFileRequest =====================
6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
616868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// This class performs the request for initiating the upload of an existing
6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// file.
61858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class InitiateUploadExistingFileRequest : public InitiateUploadRequestBase {
6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |upload_url| should be the upload_url() of the file
6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //    (resumable-create-media URL)
6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |etag| should be set if it is available to detect the upload confliction.
623868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // See also the comments of InitiateUploadRequestBase for more details
6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // about the other parameters.
625eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  InitiateUploadExistingFileRequest(RequestSender* sender,
626eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                    const DriveApiUrlGenerator& url_generator,
627eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                    const std::string& content_type,
628eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                    int64 content_length,
629eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                    const std::string& resource_id,
630eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                    const std::string& etag,
631eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                    const InitiateUploadCallback& callback);
632868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual ~InitiateUploadExistingFileRequest();
6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
635868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // UrlFetchRequestBase overrides.
6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual GURL GetURL() const OVERRIDE;
6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE;
6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const DriveApiUrlGenerator url_generator_;
6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::string resource_id_;
6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::string etag_;
6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
645868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(InitiateUploadExistingFileRequest);
6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
64890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Callback used for ResumeUpload() and GetUploadStatus().
6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef base::Callback<void(
6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const UploadRangeResponse& response,
6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    scoped_ptr<FileResource> new_resource)> UploadRangeCallback;
6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
653868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)//============================ ResumeUploadRequest ===========================
6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
655868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Performs the request for resuming the upload of a file.
656868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class ResumeUploadRequest : public ResumeUploadRequestBase {
6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
658868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // See also ResumeUploadRequestBase's comment for parameters meaning.
659c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // |callback| must not be null. |progress_callback| may be null.
660eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ResumeUploadRequest(RequestSender* sender,
661eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      const GURL& upload_location,
662eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      int64 start_position,
663eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      int64 end_position,
664eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      int64 content_length,
665eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      const std::string& content_type,
666eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      const base::FilePath& local_file_path,
667eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      const UploadRangeCallback& callback,
668eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      const ProgressCallback& progress_callback);
669868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual ~ResumeUploadRequest();
6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
672868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // UploadRangeRequestBase overrides.
673868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void OnRangeRequestComplete(
6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const UploadRangeResponse& response,
6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<base::Value> value) OVERRIDE;
676c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // content::UrlFetcherDelegate overrides.
677c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void OnURLFetchUploadProgress(const net::URLFetcher* source,
678c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                        int64 current, int64 total) OVERRIDE;
6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
6812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const UploadRangeCallback callback_;
682c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const ProgressCallback progress_callback_;
6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
684868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ResumeUploadRequest);
6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
687868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)//========================== GetUploadStatusRequest ==========================
68890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
689868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Performs the request to fetch the current upload status of a file.
690868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class GetUploadStatusRequest : public GetUploadStatusRequestBase {
69190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public:
692868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // See also GetUploadStatusRequestBase's comment for parameters meaning.
69390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // |callback| must not be null.
694eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  GetUploadStatusRequest(RequestSender* sender,
695eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         const GURL& upload_url,
696eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         int64 content_length,
697eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         const UploadRangeCallback& callback);
698868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual ~GetUploadStatusRequest();
69990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
70090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) protected:
701868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // UploadRangeRequestBase overrides.
702868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void OnRangeRequestComplete(
70390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const UploadRangeResponse& response,
70490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      scoped_ptr<base::Value> value) OVERRIDE;
70590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
70690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) private:
70790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const UploadRangeCallback callback_;
70890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
709868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(GetUploadStatusRequest);
71090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)};
71190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
712eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch//========================== DownloadFileRequest ==========================
713eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
714eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// This class performs the request for downloading of a specified file.
715eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass DownloadFileRequest : public DownloadFileRequestBase {
716eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
717eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // See also DownloadFileRequestBase's comment for parameters meaning.
718eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DownloadFileRequest(RequestSender* sender,
719eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      const DriveApiUrlGenerator& url_generator,
720eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      const std::string& resource_id,
721eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      const base::FilePath& output_file_path,
722eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      const DownloadActionCallback& download_action_callback,
723eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      const GetContentCallback& get_content_callback,
724eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      const ProgressCallback& progress_callback);
725eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual ~DownloadFileRequest();
726eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
727eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DISALLOW_COPY_AND_ASSIGN(DownloadFileRequest);
728eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
72990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace drive
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace google_apis
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
733a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif  // GOOGLE_APIS_DRIVE_DRIVE_API_REQUESTS_H_
734