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_PARSER_H_ 6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define GOOGLE_APIS_DRIVE_DRIVE_API_PARSER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/gtest_prod_util.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_vector.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_piece.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Value; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class StructType> 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class JSONValueConverter; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class NestedType> 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RepeatedMessageConverter; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace internal 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace google_apis { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// About resource represents the account information about the current user. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/about 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AboutResource { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AboutResource(); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~AboutResource(); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in this 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // class. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONValueConverter<AboutResource>* converter); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates about resource from parsed JSON. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static scoped_ptr<AboutResource> CreateFrom(const base::Value& value); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the largest change ID number. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 largest_change_id() const { return largest_change_id_; } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns total number of quota bytes. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 quota_bytes_total() const { return quota_bytes_total_; } 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the number of quota bytes used. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 quota_bytes_used() const { return quota_bytes_used_; } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns root folder ID. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& root_folder_id() const { return root_folder_id_; } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_largest_change_id(int64 largest_change_id) { 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) largest_change_id_ = largest_change_id; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_quota_bytes_total(int64 quota_bytes_total) { 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) quota_bytes_total_ = quota_bytes_total; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_quota_bytes_used(int64 quota_bytes_used) { 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) quota_bytes_used_ = quota_bytes_used; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_root_folder_id(const std::string& root_folder_id) { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_folder_id_ = root_folder_id; 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class DriveAPIParserTest; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(DriveAPIParserTest, AboutResourceParser); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses and initializes data members from content of |value|. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return false if parsing fails. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Parse(const base::Value& value); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 largest_change_id_; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 quota_bytes_total_; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 quota_bytes_used_; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string root_folder_id_; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This class is copyable on purpose. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DriveAppIcon represents an icon for Drive Application. 8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// https://developers.google.com/drive/v2/reference/apps 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DriveAppIcon { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum IconCategory { 8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) UNKNOWN, // Uninitialized state. 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DOCUMENT, // Icon for a file associated with the app. 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) APPLICATION, // Icon for the application. 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SHARED_DOCUMENT, // Icon for a shared file associated with the app. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DriveAppIcon(); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~DriveAppIcon(); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in this 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // class. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONValueConverter<DriveAppIcon>* converter); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates drive app icon instance from parsed JSON. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static scoped_ptr<DriveAppIcon> CreateFrom(const base::Value& value); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Category of the icon. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconCategory category() const { return category_; } 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Size in pixels of one side of the icon (icons are always square). 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int icon_side_length() const { return icon_side_length_; } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns URL for this icon. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& icon_url() const { return icon_url_; } 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_category(IconCategory category) { 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) category_ = category; 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_icon_side_length(int icon_side_length) { 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) icon_side_length_ = icon_side_length; 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_icon_url(const GURL& icon_url) { 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) icon_url_ = icon_url; 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses and initializes data members from content of |value|. 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return false if parsing fails. 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Parse(const base::Value& value); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extracts the icon category from the given string. Returns false and does 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not change |result| when |scheme| has an unrecognizable value. 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool GetIconCategory(const base::StringPiece& category, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconCategory* result); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::internal::RepeatedMessageConverter<DriveAppIcon>; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class AppResource; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconCategory category_; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int icon_side_length_; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL icon_url_; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DriveAppIcon); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AppResource represents a Drive Application. 14690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// https://developers.google.com/drive/v2/reference/apps 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppResource { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~AppResource(); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AppResource(); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in this 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // class. 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONValueConverter<AppResource>* converter); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates app resource from parsed JSON. 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static scoped_ptr<AppResource> CreateFrom(const base::Value& value); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns application ID, which is 12-digit decimals (e.g. "123456780123"). 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& application_id() const { return application_id_; } 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns application name. 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& name() const { return name_; } 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the name of the type of object this application creates. 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is used for displaying in "Create" menu item for this app. 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If empty, application name is used instead. 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& object_type() const { return object_type_; } 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns the product ID. 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& product_id() const { return product_id_; } 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns whether this application supports creating new objects. 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool supports_create() const { return supports_create_; } 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns whether this application is removable by apps.delete API. 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool is_removable() const { return removable_; } 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns the create URL, i.e., the URL for opening a new file by the app. 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL& create_url() const { return create_url_; } 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List of primary mime types supported by this WebApp. Primary status should 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // trigger this WebApp becoming the default handler of file instances that 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // have these mime types. 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<std::string>& primary_mimetypes() const { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return primary_mimetypes_; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List of secondary mime types supported by this WebApp. Secondary status 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should make this WebApp show up in "Open with..." pop-up menu of the 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // default action menu for file with matching mime types. 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<std::string>& secondary_mimetypes() const { 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return secondary_mimetypes_; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List of primary file extensions supported by this WebApp. Primary status 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should trigger this WebApp becoming the default handler of file instances 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that match these extensions. 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<std::string>& primary_file_extensions() const { 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return primary_file_extensions_; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List of secondary file extensions supported by this WebApp. Secondary 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // status should make this WebApp show up in "Open with..." pop-up menu of the 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // default action menu for file with matching extensions. 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<std::string>& secondary_file_extensions() const { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return secondary_file_extensions_; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns Icons for this application. An application can have multiple 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // icons for different purpose (application, document, shared document) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in several sizes. 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<DriveAppIcon>& icons() const { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return icons_; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_application_id(const std::string& application_id) { 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) application_id_ = application_id; 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_name(const std::string& name) { name_ = name; } 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_object_type(const std::string& object_type) { 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) object_type_ = object_type; 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void set_product_id(const std::string& id) { product_id_ = id; } 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_supports_create(bool supports_create) { 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) supports_create_ = supports_create; 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void set_removable(bool removable) { removable_ = removable; } 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_primary_mimetypes( 23158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ScopedVector<std::string> primary_mimetypes) { 23258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) primary_mimetypes_ = primary_mimetypes.Pass(); 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_secondary_mimetypes( 23558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ScopedVector<std::string> secondary_mimetypes) { 23658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) secondary_mimetypes_ = secondary_mimetypes.Pass(); 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_primary_file_extensions( 23958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ScopedVector<std::string> primary_file_extensions) { 24058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) primary_file_extensions_ = primary_file_extensions.Pass(); 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_secondary_file_extensions( 24358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ScopedVector<std::string> secondary_file_extensions) { 24458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) secondary_file_extensions_ = secondary_file_extensions.Pass(); 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 24658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void set_icons(ScopedVector<DriveAppIcon> icons) { 24758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) icons_ = icons.Pass(); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void set_create_url(const GURL& url) { 2505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) create_url_ = url; 2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::internal::RepeatedMessageConverter<AppResource>; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class AppList; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses and initializes data members from content of |value|. 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return false if parsing fails. 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Parse(const base::Value& value); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string application_id_; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string name_; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string object_type_; 2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string product_id_; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool supports_create_; 2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool removable_; 2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GURL create_url_; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<std::string> primary_mimetypes_; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<std::string> secondary_mimetypes_; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<std::string> primary_file_extensions_; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<std::string> secondary_file_extensions_; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<DriveAppIcon> icons_; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AppResource); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AppList represents a list of Drive Applications. 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/apps/list 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppList { 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AppList(); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~AppList(); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in this 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // class. 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONValueConverter<AppList>* converter); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates app list from parsed JSON. 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static scoped_ptr<AppList> CreateFrom(const base::Value& value); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ETag for this resource. 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& etag() const { return etag_; } 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a vector of applications. 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<AppResource>& items() const { return items_; } 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_etag(const std::string& etag) { 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) etag_ = etag; 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 30158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void set_items(ScopedVector<AppResource> items) { 30258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) items_ = items.Pass(); 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class DriveAPIParserTest; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(DriveAPIParserTest, AppListParser); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses and initializes data members from content of |value|. 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return false if parsing fails. 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Parse(const base::Value& value); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string etag_; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<AppResource> items_; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AppList); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ParentReference represents a directory. 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/parents 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ParentReference { 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParentReference(); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~ParentReference(); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in this 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // class. 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONValueConverter<ParentReference>* converter); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates parent reference from parsed JSON. 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static scoped_ptr<ParentReference> CreateFrom(const base::Value& value); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the file id of the reference. 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& file_id() const { return file_id_; } 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the URL for the parent in Drive. 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& parent_link() const { return parent_link_; } 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_file_id(const std::string& file_id) { file_id_ = file_id; } 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_parent_link(const GURL& parent_link) { 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) parent_link_ = parent_link; 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses and initializes data members from content of |value|. 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return false if parsing fails. 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Parse(const base::Value& value); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string file_id_; 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL parent_link_; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// FileLabels represents labels for file or folder. 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/files 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FileLabels { 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FileLabels(); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~FileLabels(); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in this 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // class. 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONValueConverter<FileLabels>* converter); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates about resource from parsed JSON. 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static scoped_ptr<FileLabels> CreateFrom(const base::Value& value); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether this file has been trashed. 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_trashed() const { return trashed_; } 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_trashed(bool trashed) { trashed_ = trashed; } 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class FileResource; 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses and initializes data members from content of |value|. 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return false if parsing fails. 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Parse(const base::Value& value); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool trashed_; 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// ImageMediaMetadata represents image metadata for a file. 3854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// https://developers.google.com/drive/v2/reference/files 3864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class ImageMediaMetadata { 3874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 3884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ImageMediaMetadata(); 3894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ~ImageMediaMetadata(); 3904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Registers the mapping between JSON field names and the members in this 3924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // class. 3934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) static void RegisterJSONConverter( 3944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::JSONValueConverter<ImageMediaMetadata>* converter); 3954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Creates about resource from parsed JSON. 3974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) static scoped_ptr<ImageMediaMetadata> CreateFrom(const base::Value& value); 3984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Width of the image in pixels. 4004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int width() const { return width_; } 4014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Height of the image in pixels. 4024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int height() const { return height_; } 4034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Rotation of the image in clockwise degrees. 4044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int rotation() const { return rotation_; } 4054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void set_width(int width) { width_ = width; } 4074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void set_height(int height) { height_ = height; } 4084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void set_rotation(int rotation) { rotation_ = rotation; } 4094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 4114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) friend class FileResource; 4124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Parses and initializes data members from content of |value|. 4144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Return false if parsing fails. 4154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool Parse(const base::Value& value); 4164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int width_; 4184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int height_; 4194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int rotation_; 4204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 4214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// FileResource represents a file or folder metadata in Drive. 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/files 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FileResource { 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 427a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Link to open a file resource on a web app with |app_id|. 428a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) struct OpenWithLink { 429a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) std::string app_id; 430a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) GURL open_url; 431a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) }; 432a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FileResource(); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~FileResource(); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in this 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // class. 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONValueConverter<FileResource>* converter); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates file resource from parsed JSON. 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static scoped_ptr<FileResource> CreateFrom(const base::Value& value); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if this is a directory. 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: "folder" is used elsewhere in this file to match Drive API reference, 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // but outside this file we use "directory" to match HTML5 filesystem API. 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsDirectory() const; 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Returns true if this is a hosted document. 4505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // A hosted document is a document in one of Google Docs formats (Documents, 4515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Spreadsheets, Slides, ...) whose content is not exposed via the API. It is 4525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // available only as |alternate_link()| to the document hosted on the server. 4535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool IsHostedDocument() const; 4545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns file ID. This is unique in all files in Google Drive. 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& file_id() const { return file_id_; } 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns ETag for this file. 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& etag() const { return etag_; } 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the title of this file. 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& title() const { return title_; } 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns MIME type of this file. 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& mime_type() const { return mime_type_; } 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns labels for this file. 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileLabels& labels() const { return labels_; } 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Returns image media metadata for this file. 4714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const ImageMediaMetadata& image_media_metadata() const { 4724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return image_media_metadata_; 4734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 4744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns created time of this file. 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& created_date() const { return created_date_; } 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns modified time of this file. 479c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Time& modified_date() const { return modified_date_; } 480c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns last access time by the user. 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& last_viewed_by_me_date() const { 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return last_viewed_by_me_date_; 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 486c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns time when the file was shared with the user. 487c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Time& shared_with_me_date() const { 488c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return shared_with_me_date_; 489c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 490c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 491a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Returns the 'shared' attribute of the file. 492a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool shared() const { return shared_; } 493a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns MD5 checksum of this file. 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& md5_checksum() const { return md5_checksum_; } 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the size of this file in bytes. 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 file_size() const { return file_size_; } 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return the link to open the file in Google editor or viewer. 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // E.g. Google Document, Google Spreadsheet. 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& alternate_link() const { return alternate_link_; } 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns parent references (directories) of this file. 505effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::vector<ParentReference>& parents() const { return parents_; } 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 507a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Returns the list of links to open the resource with a web app. 508a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const std::vector<OpenWithLink>& open_with_links() const { 509a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return open_with_links_; 510a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 511a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_file_id(const std::string& file_id) { 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) file_id_ = file_id; 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_etag(const std::string& etag) { 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) etag_ = etag; 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_title(const std::string& title) { 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) title_ = title; 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_mime_type(const std::string& mime_type) { 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mime_type_ = mime_type; 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 52458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) FileLabels* mutable_labels() { 52558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return &labels_; 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ImageMediaMetadata* mutable_image_media_metadata() { 5284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return &image_media_metadata_; 5294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_created_date(const base::Time& created_date) { 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) created_date_ = created_date; 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void set_modified_date(const base::Time& modified_date) { 5347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch modified_date_ = modified_date; 5357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_last_viewed_by_me_date(const base::Time& last_viewed_by_me_date) { 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last_viewed_by_me_date_ = last_viewed_by_me_date; 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 53958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void set_shared_with_me_date(const base::Time& shared_with_me_date) { 54058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) shared_with_me_date_ = shared_with_me_date; 54158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 542a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void set_shared(bool shared) { 543a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) shared_ = shared; 544a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_md5_checksum(const std::string& md5_checksum) { 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) md5_checksum_ = md5_checksum; 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_file_size(int64 file_size) { 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) file_size_ = file_size; 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_alternate_link(const GURL& alternate_link) { 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) alternate_link_ = alternate_link; 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 554effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::vector<ParentReference>* mutable_parents() { return &parents_; } 555effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::vector<OpenWithLink>* mutable_open_with_links() { 556effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return &open_with_links_; 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::internal::RepeatedMessageConverter<FileResource>; 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class ChangeResource; 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class FileList; 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses and initializes data members from content of |value|. 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return false if parsing fails. 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Parse(const base::Value& value); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string file_id_; 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string etag_; 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string title_; 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string mime_type_; 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileLabels labels_; 5734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ImageMediaMetadata image_media_metadata_; 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time created_date_; 575c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Time modified_date_; 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time last_viewed_by_me_date_; 577c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Time shared_with_me_date_; 578a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool shared_; 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string md5_checksum_; 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 file_size_; 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL alternate_link_; 582effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::vector<ParentReference> parents_; 583a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) std::vector<OpenWithLink> open_with_links_; 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// FileList represents a collection of files and folders. 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/files/list 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FileList { 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FileList(); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~FileList(); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in this 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // class. 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONValueConverter<FileList>* converter); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 598c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns true if the |value| has kind field for FileList. 599c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static bool HasFileListKind(const base::Value& value); 600c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates file list from parsed JSON. 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static scoped_ptr<FileList> CreateFrom(const base::Value& value); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a link to the next page of files. The URL includes the next page 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // token. 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& next_link() const { return next_link_; } 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a set of files in this list. 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<FileResource>& items() const { return items_; } 610cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedVector<FileResource>* mutable_items() { return &items_; } 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_next_link(const GURL& next_link) { 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) next_link_ = next_link; 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class DriveAPIParserTest; 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(DriveAPIParserTest, FileListParser); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses and initializes data members from content of |value|. 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return false if parsing fails. 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Parse(const base::Value& value); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL next_link_; 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<FileResource> items_; 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FileList); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ChangeResource represents a change in a file. 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/changes 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChangeResource { 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ChangeResource(); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~ChangeResource(); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in this 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // class. 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONValueConverter<ChangeResource>* converter); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates change resource from parsed JSON. 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static scoped_ptr<ChangeResource> CreateFrom(const base::Value& value); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns change ID for this change. This is a monotonically increasing 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // number. 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 change_id() const { return change_id_; } 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a string file ID for corresponding file of the change. 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& file_id() const { return file_id_; } 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if this file is deleted in the change. 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_deleted() const { return deleted_; } 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns FileResource of the file which the change refers to. 6567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const FileResource* file() const { return file_.get(); } 6575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FileResource* mutable_file() { return file_.get(); } 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 659a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Returns the time of this modification. 660a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::Time& modification_date() const { return modification_date_; } 661a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_change_id(int64 change_id) { 6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) change_id_ = change_id; 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_file_id(const std::string& file_id) { 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) file_id_ = file_id; 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_deleted(bool deleted) { 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) deleted_ = deleted; 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void set_file(scoped_ptr<FileResource> file) { 6727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch file_ = file.Pass(); 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 674a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void set_modification_date(const base::Time& modification_date) { 675a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) modification_date_ = modification_date; 676a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::internal::RepeatedMessageConverter<ChangeResource>; 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class ChangeList; 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses and initializes data members from content of |value|. 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return false if parsing fails. 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Parse(const base::Value& value); 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 change_id_; 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string file_id_; 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool deleted_; 6897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<FileResource> file_; 690a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Time modification_date_; 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ChangeResource); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ChangeList represents a set of changes in the drive. 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// https://developers.google.com/drive/v2/reference/changes/list 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChangeList { 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ChangeList(); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~ChangeList(); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in this 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // class. 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONValueConverter<ChangeList>* converter); 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 707c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns true if the |value| has kind field for ChangeList. 708c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static bool HasChangeListKind(const base::Value& value); 709c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates change list from parsed JSON. 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static scoped_ptr<ChangeList> CreateFrom(const base::Value& value); 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a link to the next page of files. The URL includes the next page 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // token. 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& next_link() const { return next_link_; } 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the largest change ID number. 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 largest_change_id() const { return largest_change_id_; } 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a set of changes in this list. 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<ChangeResource>& items() const { return items_; } 722cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScopedVector<ChangeResource>* mutable_items() { return &items_; } 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_next_link(const GURL& next_link) { 7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) next_link_ = next_link; 7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_largest_change_id(int64 largest_change_id) { 7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) largest_change_id_ = largest_change_id; 7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class DriveAPIParserTest; 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(DriveAPIParserTest, ChangeListParser); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses and initializes data members from content of |value|. 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return false if parsing fails. 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Parse(const base::Value& value); 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL next_link_; 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 largest_change_id_; 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<ChangeResource> items_; 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ChangeList); 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace google_apis 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 748a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif // GOOGLE_APIS_DRIVE_DRIVE_API_PARSER_H_ 749