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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_GOOGLE_APIS_GDATA_WAPI_PARSER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_GOOGLE_APIS_GDATA_WAPI_PARSER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utility> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_vector.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_piece.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/google_apis/drive_entry_kinds.h" 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FilePath; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DictionaryValue; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Value; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class StructType> 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class JSONValueConverter; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class NestedType> 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RepeatedMessageConverter; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace internal 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Defines data elements of Google Documents API as described in 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://code.google.com/apis/documents/. 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace google_apis { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(kochi): These forward declarations will be unnecessary once 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/142293 is resolved. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChangeList; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChangeResource; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FileList; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FileResource; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Defines link (URL) of an entity (document, file, feed...). Each entity could 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// have more than one link representing it. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Link { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum LinkType { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_UNKNOWN, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_SELF, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_NEXT, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_PARENT, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_ALTERNATE, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_EDIT, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_EDIT_MEDIA, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_ALT_EDIT_MEDIA, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_ALT_POST, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_FEED, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_POST, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_BATCH, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_RESUMABLE_EDIT_MEDIA, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_RESUMABLE_CREATE_MEDIA, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_TABLES_FEED, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_WORKSHEET_FEED, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_THUMBNAIL, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_EMBED, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_PRODUCT, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_ICON, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_OPEN_WITH, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_SHARE, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Link(); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~Link(); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this class. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter(base::JSONValueConverter<Link>* converter); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Type of the link. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LinkType type() const { return type_; } 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URL of the link. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& href() const { return href_; } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Title of the link. 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& title() const { return title_; } 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For OPEN_WITH links, this contains the application ID. For all other link 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // types, it is the empty string. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& app_id() const { return app_id_; } 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Link MIME type. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& mime_type() const { return mime_type_; } 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_type(LinkType type) { type_ = type; } 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_href(const GURL& href) { href_ = href; } 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_title(const std::string& title) { title_ = title; } 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_app_id(const std::string& app_id) { app_id_ = app_id; } 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_mime_type(const std::string& mime_type) { mime_type_ = mime_type; } 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class ResourceEntry; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts value of link.rel into LinkType. Outputs to |type| and returns 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // true when |rel| has a valid value. Otherwise does nothing and returns 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // false. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool GetLinkType(const base::StringPiece& rel, LinkType* type); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts value of link.rel to application ID, if there is one embedded in 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the link.rel field. Outputs to |app_id| and returns true when |rel| has a 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // valid value. Otherwise does nothing and returns false. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool GetAppID(const base::StringPiece& rel, std::string* app_id); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LinkType type_; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL href_; 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string title_; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string app_id_; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string mime_type_; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Link); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Feed links define links (URLs) to special list of entries (i.e. list of 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// previous document revisions). 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ResourceLink { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum ResourceLinkType { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FEED_LINK_UNKNOWN, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FEED_LINK_ACL, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FEED_LINK_REVISIONS, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResourceLink(); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this class. 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::JSONValueConverter<ResourceLink>* converter); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // MIME type of the feed. 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResourceLinkType type() const { return type_; } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URL of the feed. 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& href() const { return href_; } 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_type(ResourceLinkType type) { type_ = type; } 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_href(const GURL& href) { href_ = href; } 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class ResourceEntry; 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Converts value of gd$feedLink.rel into ResourceLinkType enum. 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Outputs to |result| and returns true when |rel| has a valid 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // value. Otherwise does nothing and returns false. 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool GetFeedLinkType( 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::StringPiece& rel, ResourceLinkType* result); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResourceLinkType type_; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL href_; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ResourceLink); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Author represents an author of an entity. 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Author { 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Author(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this class. 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONValueConverter<Author>* converter); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Getters. 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& name() const { return name_; } 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& email() const { return email_; } 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_name(const std::string& name) { name_ = name; } 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_email(const std::string& email) { email_ = email; } 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class ResourceEntry; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string name_; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string email_; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Author); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Entry category. 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Category { 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum CategoryType { 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CATEGORY_UNKNOWN, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CATEGORY_ITEM, 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CATEGORY_KIND, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CATEGORY_LABEL, 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Category(); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this class. 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONValueConverter<Category>* converter); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Category label. 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& label() const { return label_; } 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Category type. 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CategoryType type() const { return type_; } 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Category term. 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& term() const { return term_; } 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_label(const std::string& label) { label_ = label; } 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_type(CategoryType type) { type_ = type; } 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_term(const std::string& term) { term_ = term; } 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class ResourceEntry; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts category scheme into CategoryType enum. For example, 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://schemas.google.com/g/2005#kind => Category::CATEGORY_KIND 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns false and does not change |result| when |scheme| has an 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // unrecognizable value. 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool GetCategoryTypeFromScheme( 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::StringPiece& scheme, CategoryType* result); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string label_; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CategoryType type_; 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string term_; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Category); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Content details of a resource: mime-type, url, and so on. 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Content { 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Content(); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this class. 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONValueConverter<Content>* converter); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The URL to download the file content. 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note that the url can expire, so we'll fetch the latest resource 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // entry before starting a download to get the download URL. 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url() const { return url_; } 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& mime_type() const { return mime_type_; } 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_url(const GURL& url) { url_ = url; } 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_mime_type(const std::string& mime_type) { mime_type_ = mime_type; } 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class ResourceEntry; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string mime_type_; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This stores a representation of an application icon as registered with the 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// installed applications section of the account metadata feed. There can be 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// multiple icons registered for each application, differing in size, category 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and MIME type. 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppIcon { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum IconCategory { 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ICON_UNKNOWN, // Uninitialized state 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ICON_DOCUMENT, // Document icon for various MIME types 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ICON_APPLICATION, // Application icon for various MIME types 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ICON_SHARED_DOCUMENT, // Icon for documents that are shared from other 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // users. 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppIcon(); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~AppIcon(); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this class. 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONValueConverter<AppIcon>* converter); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Category of the icon. 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconCategory category() const { return category_; } 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Size in pixels of one side of the icon (icons are always square). 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int icon_side_length() const { return icon_side_length_; } 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get a list of links available for this AppIcon. 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<Link>& links() const { return links_; } 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the icon URL from the internal list of links. Returns the first 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // icon URL found in the list. 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL GetIconURL() const; 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_category(IconCategory category) { category_ = category; } 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_icon_side_length(int icon_side_length) { 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) icon_side_length_ = icon_side_length; 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_links(ScopedVector<Link>* links) { links_.swap(*links); } 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extracts the icon category from the given string. Returns false and does 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not change |result| when |scheme| has an unrecognizable value. 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool GetIconCategory(const base::StringPiece& category, 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconCategory* result); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconCategory category_; 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int icon_side_length_; 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<Link> links_; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AppIcon); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Base class for feed entries. This class defines fields commonly used by 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// various feeds. 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CommonMetadata { 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommonMetadata(); 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~CommonMetadata(); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a link of a given |type| for this entry. If not found, it returns 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NULL. 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Link* GetLinkByType(Link::LinkType type) const; 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Entry update time. 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time updated_time() const { return updated_time_; } 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Entry ETag. 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& etag() const { return etag_; } 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List of entry authors. 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<Author>& authors() const { return authors_; } 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List of entry links. 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<Link>& links() const { return links_; } 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedVector<Link>* mutable_links() { return &links_; } 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List of entry categories. 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<Category>& categories() const { return categories_; } 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_etag(const std::string& etag) { etag_ = etag; } 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_authors(ScopedVector<Author>* authors) { 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) authors_.swap(*authors); 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_links(ScopedVector<Link>* links) { 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) links_.swap(*links); 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_categories(ScopedVector<Category>* categories) { 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) categories_.swap(*categories); 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_updated_time(const base::Time& updated_time) { 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) updated_time_ = updated_time; 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this class. 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) template<typename CommonMetadataDescendant> 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::JSONValueConverter<CommonMetadataDescendant>* converter); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string etag_; 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<Author> authors_; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<Link> links_; 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<Category> categories_; 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time updated_time_; 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(CommonMetadata); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class represents a resource entry. A resource is a generic term which 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// refers to a file and a directory. 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ResourceEntry : public CommonMetadata { 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResourceEntry(); 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ResourceEntry(); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extracts "entry" dictionary from the JSON value, and parse the contents, 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // using CreateFrom(). Returns NULL on failure. The input JSON data, coming 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // from the gdata server, looks like: 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // { 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "encoding": "UTF-8", 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "entry": { ... }, // This function will extract this and parse. 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "version": "1.0" 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // } 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The caller should delete the returned object. 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<ResourceEntry> ExtractAndParse(const base::Value& value); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creates resource entry from parsed JSON Value. You should call 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this instead of instantiating JSONValueConverter by yourself 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // because this method does some post-process for some fields. See 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FillRemainingFields comment and implementation for the details. 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<ResourceEntry> CreateFrom(const base::Value& value); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creates resource entry from FileResource. 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(kochi): This should go away soon. http://crbug.com/142293 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<ResourceEntry> CreateFromFileResource( 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileResource& file); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creates resource entry from ChangeResource. 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Todo(Kochi): This should go away soon. http://crbug.com/142293 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<ResourceEntry> CreateFromChangeResource( 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ChangeResource& change); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns name of entry node. 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string GetEntryNodeName(); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this class. 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::JSONValueConverter<ResourceEntry>* converter); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets true to |result| if the field exists. 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Always returns true even when the field does not exist. 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool HasFieldPresent(const base::Value* value, bool* result); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Parses |value| as int64 and sets it to |result|. If the field does not 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // exist, sets 0 to |result| as default value. 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns true if |value| is NULL or it is parsed as int64 successfully. 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static bool ParseChangestamp(const base::Value* value, int64* result); 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The resource ID is used to identify a resource, which looks like: 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // file:d41d8cd98f00b204e9800998ecf8 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& resource_id() const { return resource_id_; } 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This is a URL looks like: 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // https://docs.google.com/feeds/id/file%3Ad41d8cd98f00b204e9800998ecf8. 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The URL is currently not used. 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& id() const { return id_; } 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DriveEntryKind kind() const { return kind_; } 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& title() const { return title_; } 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time published_time() const { return published_time_; } 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time last_viewed_time() const { return last_viewed_time_; } 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<std::string>& labels() const { return labels_; } 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The URL to download a file content. 441868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Search for 'download_url' in gdata_wapi_requests.h for details. 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& download_url() const { return content_.url(); } 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& content_mime_type() const { return content_.mime_type(); } 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The resource links contain extra links for revisions and access control, 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // etc. Note that links() contain more basic links like edit URL, 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // alternative URL, etc. 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ScopedVector<ResourceLink>& resource_links() const { 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return resource_links_; 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // File name (exists only for kinds FILE and PDF). 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& filename() const { return filename_; } 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Suggested file name (exists only for kinds FILE and PDF). 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& suggested_filename() const { return suggested_filename_; } 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // File content MD5 (exists only for kinds FILE and PDF). 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& file_md5() const { return file_md5_; } 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // File size (exists only for kinds FILE and PDF). 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 file_size() const { return file_size_; } 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // True if the file or directory is deleted (applicable to change list only). 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool deleted() const { return deleted_ || removed_; } 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Changestamp (exists only for change query results). 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If not exists, defaults to 0. 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 changestamp() const { return changestamp_; } 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Text version of resource entry kind. Returns an empty string for 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // unknown entry kind. 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetEntryKindText() const; 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns preferred file extension for hosted documents. If entry is not 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a hosted document, this call returns an empty string. 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetHostedDocumentExtension() const; 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // True if resource entry is remotely hosted. 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_hosted_document() const { 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (ClassifyEntryKind(kind_) & KIND_OF_HOSTED_DOCUMENT) > 0; 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // True if resource entry hosted by Google Documents. 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_google_document() const { 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (ClassifyEntryKind(kind_) & KIND_OF_GOOGLE_DOCUMENT) > 0; 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // True if resource entry is hosted by an external application. 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_external_document() const { 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (ClassifyEntryKind(kind_) & KIND_OF_EXTERNAL_DOCUMENT) > 0; 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // True if resource entry is a folder (collection). 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_folder() const { 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (ClassifyEntryKind(kind_) & KIND_OF_FOLDER) > 0; 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // True if resource entry is regular file. 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_file() const { 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (ClassifyEntryKind(kind_) & KIND_OF_FILE) > 0; 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // True if resource entry can't be mapped to the file system. 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_special() const { 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !is_file() && !is_folder() && !is_hosted_document(); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The following constructs are exposed for unit tests. 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Classes of EntryKind. Used for ClassifyEntryKind(). 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum EntryKindClass { 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KIND_OF_NONE = 0, 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KIND_OF_HOSTED_DOCUMENT = 1, 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KIND_OF_GOOGLE_DOCUMENT = 1 << 1, 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KIND_OF_EXTERNAL_DOCUMENT = 1 << 2, 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KIND_OF_FOLDER = 1 << 3, 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KIND_OF_FILE = 1 << 4, 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Classifies the EntryKind. The returned value is a bitmask of 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // EntryKindClass. For example, DOCUMENT is classified as 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // KIND_OF_HOSTED_DOCUMENT and KIND_OF_GOOGLE_DOCUMENT, hence the returned 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // value is KIND_OF_HOSTED_DOCUMENT | KIND_OF_GOOGLE_DOCUMENT. 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int ClassifyEntryKind(DriveEntryKind kind); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Classifies the EntryKind by the file extension of specific path. The 52490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // returned value is a bitmask of EntryKindClass. See also ClassifyEntryKind. 52590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static int ClassifyEntryKindByFileExtension(const base::FilePath& file); 52690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_resource_id(const std::string& resource_id) { 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) resource_id_ = resource_id; 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_id(const std::string& id) { id_ = id; } 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_kind(DriveEntryKind kind) { kind_ = kind; } 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_title(const std::string& title) { title_ = title; } 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_published_time(const base::Time& published_time) { 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) published_time_ = published_time; 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_last_viewed_time(const base::Time& last_viewed_time) { 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last_viewed_time_ = last_viewed_time; 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_labels(const std::vector<std::string>& labels) { 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) labels_ = labels; 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_content(const Content& content) { 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_ = content; 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_resource_links(ScopedVector<ResourceLink>* resource_links) { 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) resource_links_.swap(*resource_links); 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_filename(const std::string& filename) { filename_ = filename; } 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_suggested_filename(const std::string& suggested_filename) { 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) suggested_filename_ = suggested_filename; 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_file_md5(const std::string& file_md5) { file_md5_ = file_md5; } 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_file_size(int64 file_size) { file_size_ = file_size; } 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_deleted(bool deleted) { deleted_ = deleted; } 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_removed(bool removed) { removed_ = removed; } 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_changestamp(int64 changestamp) { changestamp_ = changestamp; } 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class base::internal::RepeatedMessageConverter<ResourceEntry>; 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class ResourceList; 561868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) friend class ResumeUploadRequest; 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fills the remaining fields where JSONValueConverter cannot catch. 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FillRemainingFields(); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts categories.term into DriveEntryKind enum. 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static DriveEntryKind GetEntryKindFromTerm(const std::string& term); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts |kind| into its text identifier equivalent. 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* GetEntryKindDescription(DriveEntryKind kind); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string resource_id_; 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string id_; 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DriveEntryKind kind_; 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string title_; 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time published_time_; 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Last viewed value may be unreliable. See: crbug.com/152628. 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time last_viewed_time_; 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<std::string> labels_; 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Content content_; 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedVector<ResourceLink> resource_links_; 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Optional fields for files only. 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string filename_; 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string suggested_filename_; 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string file_md5_; 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 file_size_; 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool deleted_; 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool removed_; 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 changestamp_; 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ResourceEntry); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class represents a list of resource entries with some extra metadata 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// such as the root upload URL. The feed is paginated and the rest of the 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// feed can be fetched by retrieving the remaining parts of the feed from 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// URLs provided by GetNextFeedURL() method. 5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ResourceList : public CommonMetadata { 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResourceList(); 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ResourceList(); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extracts "feed" dictionary from the JSON value, and parse the contents, 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // using CreateFrom(). Returns NULL on failure. The input JSON data, coming 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // from the gdata server, looks like: 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // { 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "encoding": "UTF-8", 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "feed": { ... }, // This function will extract this and parse. 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "version": "1.0" 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // } 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<ResourceList> ExtractAndParse(const base::Value& value); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates feed from parsed JSON Value. You should call this 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // instead of instantiating JSONValueConverter by yourself because 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this method does some post-process for some fields. See 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // FillRemainingFields comment and implementation in ResourceEntry 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // class for the details. 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<ResourceList> CreateFrom(const base::Value& value); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Variant of CreateFrom() above, creates feed from parsed ChangeList. 620c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TODO(hidehiko): This should go away soon. http://crbug.com/142293 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<ResourceList> CreateFromChangeList( 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ChangeList& changelist); 623c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Variant of CreateFrom() above, creates feed from parsed FileList. 624c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TODO(hidehiko): This should go away soon. http://crbug.com/142293 625c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static scoped_ptr<ResourceList> CreateFromFileList( 626c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileList& file_list); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this class. 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::JSONValueConverter<ResourceList>* converter); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true and passes|url| of the next feed if the current entry list 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // does not completed this feed. 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool GetNextFeedURL(GURL* url) const; 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // List of resource entries. 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ScopedVector<ResourceEntry>& entries() const { return entries_; } 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedVector<ResourceEntry>* mutable_entries() { return &entries_; } 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Releases entries_ into |entries|. This is a transfer of ownership, so the 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // caller is responsible for deleting the elements of |entries|. 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ReleaseEntries(std::vector<ResourceEntry*>* entries); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start index of the resource entry list. 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int start_index() const { return start_index_; } 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Number of items per feed of the resource entry list. 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int items_per_page() const { return items_per_page_; } 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The largest changestamp. Next time the resource list should be fetched 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // from this changestamp. 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 largest_changestamp() const { return largest_changestamp_; } 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Resource entry list title. 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& title() { return title_; } 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_entries(ScopedVector<ResourceEntry>* entries) { 6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) entries_.swap(*entries); 6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_start_index(int start_index) { 6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) start_index_ = start_index; 6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_items_per_page(int items_per_page) { 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) items_per_page_ = items_per_page; 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_title(const std::string& title) { 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) title_ = title; 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_largest_changestamp(int64 largest_changestamp) { 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) largest_changestamp_ = largest_changestamp; 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses and initializes data members from content of |value|. 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return false if parsing fails. 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Parse(const base::Value& value); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedVector<ResourceEntry> entries_; 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int start_index_; 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int items_per_page_; 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string title_; 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 largest_changestamp_; 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ResourceList); 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Metadata representing installed Google Drive application. 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InstalledApp { 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::vector<std::pair<int, GURL> > IconList; 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstalledApp(); 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~InstalledApp(); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebApp name. 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& app_name() const { return app_name_; } 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Drive app id 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& app_id() const { return app_id_; } 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Object (file) type name that is generated by this WebApp. 7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& object_type() const { return object_type_; } 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if WebApp supports creation of new file instances. 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool supports_create() const { return supports_create_; } 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List of primary mime types supported by this WebApp. Primary status should 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // trigger this WebApp becoming the default handler of file instances that 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // have these mime types. 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<std::string>& primary_mimetypes() const { 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return primary_mimetypes_; 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List of secondary mime types supported by this WebApp. Secondary status 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should make this WebApp show up in "Open with..." pop-up menu of the 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // default action menu for file with matching mime types. 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<std::string>& secondary_mimetypes() const { 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return secondary_mimetypes_; 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List of primary file extensions supported by this WebApp. Primary status 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should trigger this WebApp becoming the default handler of file instances 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that match these extensions. 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<std::string>& primary_extensions() const { 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return primary_extensions_; 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List of secondary file extensions supported by this WebApp. Secondary 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // status should make this WebApp show up in "Open with..." pop-up menu of the 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // default action menu for file with matching extensions. 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<std::string>& secondary_extensions() const { 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return secondary_extensions_; 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List of entry links. 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<Link>& links() const { return links_; } 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a list of icons associated with this installed application. 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<AppIcon>& app_icons() const { 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return app_icons_; 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Convenience function for getting the icon URLs for a particular |category| 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of icon. Icons are returned in a sorted list, from smallest to largest. 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconList GetIconsForCategory(AppIcon::IconCategory category) const; 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieves product URL from the link collection. 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL GetProductUrl() const; 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this class. 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONValueConverter<InstalledApp>* converter); 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_app_id(const std::string& app_id) { app_id_ = app_id; } 7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_app_name(const std::string& app_name) { app_name_ = app_name; } 7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_object_type(const std::string& object_type) { 7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) object_type_ = object_type; 7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_supports_create(bool supports_create) { 7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) supports_create_ = supports_create; 7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_primary_mimetypes( 7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedVector<std::string>* primary_mimetypes) { 7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) primary_mimetypes_.swap(*primary_mimetypes); 7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_secondary_mimetypes( 7692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedVector<std::string>* secondary_mimetypes) { 7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) secondary_mimetypes_.swap(*secondary_mimetypes); 7712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_primary_extensions( 7732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedVector<std::string>* primary_extensions) { 7742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) primary_extensions_.swap(*primary_extensions); 7752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_secondary_extensions( 7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedVector<std::string>* secondary_extensions) { 7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) secondary_extensions_.swap(*secondary_extensions); 7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_links(ScopedVector<Link>* links) { 7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) links_.swap(*links); 7822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_app_icons(ScopedVector<AppIcon>* app_icons) { 7842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) app_icons_.swap(*app_icons); 7852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extracts "$t" value from the dictionary |value| and returns it in |result|. 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the string value can't be found, it returns false. 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool GetValueString(const base::Value* value, 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* result); 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string app_id_; 7942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string app_name_; 7952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string object_type_; 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool supports_create_; 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<std::string> primary_mimetypes_; 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<std::string> secondary_mimetypes_; 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<std::string> primary_extensions_; 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<std::string> secondary_extensions_; 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<Link> links_; 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<AppIcon> app_icons_; 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Account metadata feed represents the metadata object attached to the user's 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// account. 8072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class AccountMetadata { 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AccountMetadata(); 8102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~AccountMetadata(); 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates feed from parsed JSON Value. You should call this 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // instead of instantiating JSONValueConverter by yourself because 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this method does some post-process for some fields. See 8152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // FillRemainingFields comment and implementation in ResourceEntry 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // class for the details. 8172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<AccountMetadata> CreateFrom(const base::Value& value); 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 quota_bytes_total() const { 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return quota_bytes_total_; 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 quota_bytes_used() const { 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return quota_bytes_used_; 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 largest_changestamp() const { 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return largest_changestamp_; 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ScopedVector<InstalledApp>& installed_apps() const { 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return installed_apps_; 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_quota_bytes_total(int64 quota_bytes_total) { 8362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) quota_bytes_total_ = quota_bytes_total; 8372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_quota_bytes_used(int64 quota_bytes_used) { 8392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) quota_bytes_used_ = quota_bytes_used; 8402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_largest_changestamp(int64 largest_changestamp) { 8422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) largest_changestamp_ = largest_changestamp; 8432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_installed_apps(ScopedVector<InstalledApp>* installed_apps) { 8452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) installed_apps_.swap(*installed_apps); 8462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers the mapping between JSON field names and the members in 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this class. 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void RegisterJSONConverter( 8512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::JSONValueConverter<AccountMetadata>* converter); 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses and initializes data members from content of |value|. 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return false if parsing fails. 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Parse(const base::Value& value); 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 quota_bytes_total_; 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 quota_bytes_used_; 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 largest_changestamp_; 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<InstalledApp> installed_apps_; 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AccountMetadata); 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace google_apis 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_GOOGLE_APIS_GDATA_WAPI_PARSER_H_ 870