12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#ifndef GOOGLE_APIS_DRIVE_DRIVE_API_URL_GENERATOR_H_
6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define GOOGLE_APIS_DRIVE_DRIVE_API_URL_GENERATOR_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace google_apis {
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class is used to generate URLs for communicating with drive api
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// servers for production, and a local server for testing.
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DriveApiUrlGenerator {
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |base_url| is the path to the target drive api server.
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Note that this is an injecting point for a testing server.
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DriveApiUrlGenerator(const GURL& base_url, const GURL& base_download_url);
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ~DriveApiUrlGenerator();
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The base URL for communicating with the production drive api server.
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kBaseUrlForProduction[];
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // The base URL for the file download server for production.
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  static const char kBaseDownloadUrlForProduction[];
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
29424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Returns a URL to invoke "About: get" method.
30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  GURL GetAboutGetUrl() const;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Returns a URL to invoke "Apps: list" method.
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Set |use_internal_endpoint| to true if official Chrome's API key is used
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // and retrieving more information (related to App uninstall) is necessary.
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  GURL GetAppsListUrl(bool use_internal_endpoint) const;
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Returns a URL to uninstall an app with the give |app_id|.
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  GURL GetAppsDeleteUrl(const std::string& app_id) const;
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
40424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Returns a URL to fetch a file metadata.
41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  GURL GetFilesGetUrl(const std::string& file_id) const;
42424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Returns a URL to authorize an app to access a file.
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  GURL GetFilesAuthorizeUrl(const std::string& file_id,
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                            const std::string& app_id) const;
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
47424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Returns a URL to create a resource.
48424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  GURL GetFilesInsertUrl() const;
49424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
50424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Returns a URL to patch file metadata.
51424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  GURL GetFilesPatchUrl(const std::string& file_id,
52424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                        bool set_modified_date,
53424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                        bool update_viewed_date) const;
54424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
55424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Returns a URL to copy a resource specified by |file_id|.
56424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  GURL GetFilesCopyUrl(const std::string& file_id) const;
57424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
58424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Returns a URL to fetch file list.
59424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  GURL GetFilesListUrl(int max_results,
60424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                       const std::string& page_token,
61424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                       const std::string& q) const;
62424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Returns a URL to delete a resource with the given |file_id|.
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  GURL GetFilesDeleteUrl(const std::string& file_id) const;
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
66424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Returns a URL to trash a resource with the given |file_id|.
67424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  GURL GetFilesTrashUrl(const std::string& file_id) const;
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
69424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Returns a URL to fetch a list of changes.
70424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  GURL GetChangesListUrl(bool include_deleted,
71424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                         int max_results,
72424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                         const std::string& page_token,
73424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                         int64 start_change_id) const;
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Returns a URL to add a resource to a directory with |folder_id|.
7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  GURL GetChildrenInsertUrl(const std::string& folder_id) const;
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns a URL to remove a resource with |child_id| from a directory
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // with |folder_id|.
8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  GURL GetChildrenDeleteUrl(const std::string& child_id,
8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                            const std::string& folder_id) const;
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns a URL to initiate uploading a new file.
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  GURL GetInitiateUploadNewFileUrl(bool set_modified_date) const;
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns a URL to initiate uploading an existing file specified by
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |resource_id|.
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  GURL GetInitiateUploadExistingFileUrl(const std::string& resource_id,
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                        bool set_modified_date) const;
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Generates a URL for downloading a file.
92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  GURL GenerateDownloadFileUrl(const std::string& resource_id) const;
93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Generates a URL for adding permissions.
95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  GURL GetPermissionsInsertUrl(const std::string& resource_id) const;
96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const GURL base_url_;
99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  const GURL base_download_url_;
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This class is copyable hence no DISALLOW_COPY_AND_ASSIGN here.
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace google_apis
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
106a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif  // GOOGLE_APIS_DRIVE_DRIVE_API_URL_GENERATOR_H_
107