Index: chrome/browser/google_apis/drive_api_parser.cc |
diff --git a/chrome/browser/google_apis/drive_api_parser.cc b/chrome/browser/google_apis/drive_api_parser.cc |
deleted file mode 100644 |
index 5cbb079ab16d46a5bf4a441798d0b3e0885c9a0a..0000000000000000000000000000000000000000 |
--- a/chrome/browser/google_apis/drive_api_parser.cc |
+++ /dev/null |
@@ -1,727 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/google_apis/drive_api_parser.h" |
- |
-#include <algorithm> |
- |
-#include "base/basictypes.h" |
-#include "base/files/file_path.h" |
-#include "base/json/json_value_converter.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "base/strings/string_piece.h" |
-#include "base/strings/string_util.h" |
-#include "base/values.h" |
-#include "chrome/browser/google_apis/time_util.h" |
- |
-using base::Value; |
-using base::DictionaryValue; |
-using base::ListValue; |
- |
-namespace google_apis { |
- |
-namespace { |
- |
-bool CreateFileResourceFromValue(const base::Value* value, |
- scoped_ptr<FileResource>* file) { |
- *file = FileResource::CreateFrom(*value); |
- return !!*file; |
-} |
- |
-// Converts |url_string| to |result|. Always returns true to be used |
-// for JSONValueConverter::RegisterCustomField method. |
-// TODO(mukai): make it return false in case of invalid |url_string|. |
-bool GetGURLFromString(const base::StringPiece& url_string, GURL* result) { |
- *result = GURL(url_string.as_string()); |
- return true; |
-} |
- |
-// Converts |value| to |result|. The key of |value| is app_id, and its value |
-// is URL to open the resource on the web app. |
-bool GetOpenWithLinksFromDictionaryValue( |
- const base::Value* value, |
- std::vector<FileResource::OpenWithLink>* result) { |
- DCHECK(value); |
- DCHECK(result); |
- |
- const base::DictionaryValue* dictionary_value; |
- if (!value->GetAsDictionary(&dictionary_value)) |
- return false; |
- |
- result->reserve(dictionary_value->size()); |
- for (DictionaryValue::Iterator iter(*dictionary_value); |
- !iter.IsAtEnd(); iter.Advance()) { |
- std::string string_value; |
- if (!iter.value().GetAsString(&string_value)) |
- return false; |
- |
- FileResource::OpenWithLink open_with_link; |
- open_with_link.app_id = iter.key(); |
- open_with_link.open_url = GURL(string_value); |
- result->push_back(open_with_link); |
- } |
- |
- return true; |
-} |
- |
-// Drive v2 API JSON names. |
- |
-// Definition order follows the order of documentation in |
-// https://developers.google.com/drive/v2/reference/ |
- |
-// Common |
-const char kKind[] = "kind"; |
-const char kId[] = "id"; |
-const char kETag[] = "etag"; |
-const char kSelfLink[] = "selfLink"; |
-const char kItems[] = "items"; |
-const char kLargestChangeId[] = "largestChangeId"; |
- |
-// About Resource |
-// https://developers.google.com/drive/v2/reference/about |
-const char kAboutKind[] = "drive#about"; |
-const char kQuotaBytesTotal[] = "quotaBytesTotal"; |
-const char kQuotaBytesUsed[] = "quotaBytesUsed"; |
-const char kRootFolderId[] = "rootFolderId"; |
- |
-// App Icon |
-// https://developers.google.com/drive/v2/reference/apps |
-const char kCategory[] = "category"; |
-const char kSize[] = "size"; |
-const char kIconUrl[] = "iconUrl"; |
- |
-// Apps Resource |
-// https://developers.google.com/drive/v2/reference/apps |
-const char kAppKind[] = "drive#app"; |
-const char kName[] = "name"; |
-const char kObjectType[] = "objectType"; |
-const char kSupportsCreate[] = "supportsCreate"; |
-const char kSupportsImport[] = "supportsImport"; |
-const char kInstalled[] = "installed"; |
-const char kAuthorized[] = "authorized"; |
-const char kProductUrl[] = "productUrl"; |
-const char kPrimaryMimeTypes[] = "primaryMimeTypes"; |
-const char kSecondaryMimeTypes[] = "secondaryMimeTypes"; |
-const char kPrimaryFileExtensions[] = "primaryFileExtensions"; |
-const char kSecondaryFileExtensions[] = "secondaryFileExtensions"; |
-const char kIcons[] = "icons"; |
- |
-// Apps List |
-// https://developers.google.com/drive/v2/reference/apps/list |
-const char kAppListKind[] = "drive#appList"; |
- |
-// Parent Resource |
-// https://developers.google.com/drive/v2/reference/parents |
-const char kParentReferenceKind[] = "drive#parentReference"; |
-const char kParentLink[] = "parentLink"; |
-const char kIsRoot[] = "isRoot"; |
- |
-// File Resource |
-// https://developers.google.com/drive/v2/reference/files |
-const char kFileKind[] = "drive#file"; |
-const char kTitle[] = "title"; |
-const char kMimeType[] = "mimeType"; |
-const char kCreatedDate[] = "createdDate"; |
-const char kModifiedDate[] = "modifiedDate"; |
-const char kModifiedByMeDate[] = "modifiedByMeDate"; |
-const char kLastViewedByMeDate[] = "lastViewedByMeDate"; |
-const char kSharedWithMeDate[] = "sharedWithMeDate"; |
-const char kDownloadUrl[] = "downloadUrl"; |
-const char kFileExtension[] = "fileExtension"; |
-const char kMd5Checksum[] = "md5Checksum"; |
-const char kFileSize[] = "fileSize"; |
-const char kAlternateLink[] = "alternateLink"; |
-const char kEmbedLink[] = "embedLink"; |
-const char kParents[] = "parents"; |
-const char kThumbnailLink[] = "thumbnailLink"; |
-const char kWebContentLink[] = "webContentLink"; |
-const char kOpenWithLinks[] = "openWithLinks"; |
-const char kLabels[] = "labels"; |
-const char kImageMediaMetadata[] = "imageMediaMetadata"; |
-// These 5 flags are defined under |labels|. |
-const char kLabelStarred[] = "starred"; |
-const char kLabelHidden[] = "hidden"; |
-const char kLabelTrashed[] = "trashed"; |
-const char kLabelRestricted[] = "restricted"; |
-const char kLabelViewed[] = "viewed"; |
-// These 3 flags are defined under |imageMediaMetadata|. |
-const char kImageMediaMetadataWidth[] = "width"; |
-const char kImageMediaMetadataHeight[] = "height"; |
-const char kImageMediaMetadataRotation[] = "rotation"; |
- |
-const char kDriveFolderMimeType[] = "application/vnd.google-apps.folder"; |
- |
-// Files List |
-// https://developers.google.com/drive/v2/reference/files/list |
-const char kFileListKind[] = "drive#fileList"; |
-const char kNextPageToken[] = "nextPageToken"; |
-const char kNextLink[] = "nextLink"; |
- |
-// Change Resource |
-// https://developers.google.com/drive/v2/reference/changes |
-const char kChangeKind[] = "drive#change"; |
-const char kFileId[] = "fileId"; |
-const char kDeleted[] = "deleted"; |
-const char kFile[] = "file"; |
- |
-// Changes List |
-// https://developers.google.com/drive/v2/reference/changes/list |
-const char kChangeListKind[] = "drive#changeList"; |
- |
-// Maps category name to enum IconCategory. |
-struct AppIconCategoryMap { |
- DriveAppIcon::IconCategory category; |
- const char* category_name; |
-}; |
- |
-const AppIconCategoryMap kAppIconCategoryMap[] = { |
- { DriveAppIcon::DOCUMENT, "document" }, |
- { DriveAppIcon::APPLICATION, "application" }, |
- { DriveAppIcon::SHARED_DOCUMENT, "documentShared" }, |
-}; |
- |
-// Checks if the JSON is expected kind. In Drive API, JSON data structure has |
-// |kind| property which denotes the type of the structure (e.g. "drive#file"). |
-bool IsResourceKindExpected(const base::Value& value, |
- const std::string& expected_kind) { |
- const base::DictionaryValue* as_dict = NULL; |
- std::string kind; |
- return value.GetAsDictionary(&as_dict) && |
- as_dict->HasKey(kKind) && |
- as_dict->GetString(kKind, &kind) && |
- kind == expected_kind; |
-} |
- |
-} // namespace |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// AboutResource implementation |
- |
-AboutResource::AboutResource() |
- : largest_change_id_(0), |
- quota_bytes_total_(0), |
- quota_bytes_used_(0) {} |
- |
-AboutResource::~AboutResource() {} |
- |
-// static |
-scoped_ptr<AboutResource> AboutResource::CreateFrom(const base::Value& value) { |
- scoped_ptr<AboutResource> resource(new AboutResource()); |
- if (!IsResourceKindExpected(value, kAboutKind) || !resource->Parse(value)) { |
- LOG(ERROR) << "Unable to create: Invalid About resource JSON!"; |
- return scoped_ptr<AboutResource>(); |
- } |
- return resource.Pass(); |
-} |
- |
-// static |
-void AboutResource::RegisterJSONConverter( |
- base::JSONValueConverter<AboutResource>* converter) { |
- converter->RegisterCustomField<int64>(kLargestChangeId, |
- &AboutResource::largest_change_id_, |
- &base::StringToInt64); |
- converter->RegisterCustomField<int64>(kQuotaBytesTotal, |
- &AboutResource::quota_bytes_total_, |
- &base::StringToInt64); |
- converter->RegisterCustomField<int64>(kQuotaBytesUsed, |
- &AboutResource::quota_bytes_used_, |
- &base::StringToInt64); |
- converter->RegisterStringField(kRootFolderId, |
- &AboutResource::root_folder_id_); |
-} |
- |
-bool AboutResource::Parse(const base::Value& value) { |
- base::JSONValueConverter<AboutResource> converter; |
- if (!converter.Convert(value, this)) { |
- LOG(ERROR) << "Unable to parse: Invalid About resource JSON!"; |
- return false; |
- } |
- return true; |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// DriveAppIcon implementation |
- |
-DriveAppIcon::DriveAppIcon() : category_(UNKNOWN), icon_side_length_(0) {} |
- |
-DriveAppIcon::~DriveAppIcon() {} |
- |
-// static |
-void DriveAppIcon::RegisterJSONConverter( |
- base::JSONValueConverter<DriveAppIcon>* converter) { |
- converter->RegisterCustomField<IconCategory>( |
- kCategory, |
- &DriveAppIcon::category_, |
- &DriveAppIcon::GetIconCategory); |
- converter->RegisterIntField(kSize, &DriveAppIcon::icon_side_length_); |
- converter->RegisterCustomField<GURL>(kIconUrl, |
- &DriveAppIcon::icon_url_, |
- GetGURLFromString); |
-} |
- |
-// static |
-scoped_ptr<DriveAppIcon> DriveAppIcon::CreateFrom(const base::Value& value) { |
- scoped_ptr<DriveAppIcon> resource(new DriveAppIcon()); |
- if (!resource->Parse(value)) { |
- LOG(ERROR) << "Unable to create: Invalid DriveAppIcon JSON!"; |
- return scoped_ptr<DriveAppIcon>(); |
- } |
- return resource.Pass(); |
-} |
- |
-bool DriveAppIcon::Parse(const base::Value& value) { |
- base::JSONValueConverter<DriveAppIcon> converter; |
- if (!converter.Convert(value, this)) { |
- LOG(ERROR) << "Unable to parse: Invalid DriveAppIcon"; |
- return false; |
- } |
- return true; |
-} |
- |
-// static |
-bool DriveAppIcon::GetIconCategory(const base::StringPiece& category, |
- DriveAppIcon::IconCategory* result) { |
- for (size_t i = 0; i < arraysize(kAppIconCategoryMap); i++) { |
- if (category == kAppIconCategoryMap[i].category_name) { |
- *result = kAppIconCategoryMap[i].category; |
- return true; |
- } |
- } |
- DVLOG(1) << "Unknown icon category " << category; |
- return false; |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// AppResource implementation |
- |
-AppResource::AppResource() |
- : supports_create_(false), |
- supports_import_(false), |
- installed_(false), |
- authorized_(false) { |
-} |
- |
-AppResource::~AppResource() {} |
- |
-// static |
-void AppResource::RegisterJSONConverter( |
- base::JSONValueConverter<AppResource>* converter) { |
- converter->RegisterStringField(kId, &AppResource::application_id_); |
- converter->RegisterStringField(kName, &AppResource::name_); |
- converter->RegisterStringField(kObjectType, &AppResource::object_type_); |
- converter->RegisterBoolField(kSupportsCreate, &AppResource::supports_create_); |
- converter->RegisterBoolField(kSupportsImport, &AppResource::supports_import_); |
- converter->RegisterBoolField(kInstalled, &AppResource::installed_); |
- converter->RegisterBoolField(kAuthorized, &AppResource::authorized_); |
- converter->RegisterCustomField<GURL>(kProductUrl, |
- &AppResource::product_url_, |
- GetGURLFromString); |
- converter->RegisterRepeatedString(kPrimaryMimeTypes, |
- &AppResource::primary_mimetypes_); |
- converter->RegisterRepeatedString(kSecondaryMimeTypes, |
- &AppResource::secondary_mimetypes_); |
- converter->RegisterRepeatedString(kPrimaryFileExtensions, |
- &AppResource::primary_file_extensions_); |
- converter->RegisterRepeatedString(kSecondaryFileExtensions, |
- &AppResource::secondary_file_extensions_); |
- converter->RegisterRepeatedMessage(kIcons, &AppResource::icons_); |
-} |
- |
-// static |
-scoped_ptr<AppResource> AppResource::CreateFrom(const base::Value& value) { |
- scoped_ptr<AppResource> resource(new AppResource()); |
- if (!IsResourceKindExpected(value, kAppKind) || !resource->Parse(value)) { |
- LOG(ERROR) << "Unable to create: Invalid AppResource JSON!"; |
- return scoped_ptr<AppResource>(); |
- } |
- return resource.Pass(); |
-} |
- |
-bool AppResource::Parse(const base::Value& value) { |
- base::JSONValueConverter<AppResource> converter; |
- if (!converter.Convert(value, this)) { |
- LOG(ERROR) << "Unable to parse: Invalid AppResource"; |
- return false; |
- } |
- return true; |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// AppList implementation |
- |
-AppList::AppList() {} |
- |
-AppList::~AppList() {} |
- |
-// static |
-void AppList::RegisterJSONConverter( |
- base::JSONValueConverter<AppList>* converter) { |
- converter->RegisterStringField(kETag, &AppList::etag_); |
- converter->RegisterRepeatedMessage<AppResource>(kItems, |
- &AppList::items_); |
-} |
- |
-// static |
-scoped_ptr<AppList> AppList::CreateFrom(const base::Value& value) { |
- scoped_ptr<AppList> resource(new AppList()); |
- if (!IsResourceKindExpected(value, kAppListKind) || !resource->Parse(value)) { |
- LOG(ERROR) << "Unable to create: Invalid AppList JSON!"; |
- return scoped_ptr<AppList>(); |
- } |
- return resource.Pass(); |
-} |
- |
-bool AppList::Parse(const base::Value& value) { |
- base::JSONValueConverter<AppList> converter; |
- if (!converter.Convert(value, this)) { |
- LOG(ERROR) << "Unable to parse: Invalid AppList"; |
- return false; |
- } |
- return true; |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// ParentReference implementation |
- |
-ParentReference::ParentReference() : is_root_(false) {} |
- |
-ParentReference::~ParentReference() {} |
- |
-// static |
-void ParentReference::RegisterJSONConverter( |
- base::JSONValueConverter<ParentReference>* converter) { |
- converter->RegisterStringField(kId, &ParentReference::file_id_); |
- converter->RegisterCustomField<GURL>(kParentLink, |
- &ParentReference::parent_link_, |
- GetGURLFromString); |
- converter->RegisterBoolField(kIsRoot, &ParentReference::is_root_); |
-} |
- |
-// static |
-scoped_ptr<ParentReference> |
-ParentReference::CreateFrom(const base::Value& value) { |
- scoped_ptr<ParentReference> reference(new ParentReference()); |
- if (!IsResourceKindExpected(value, kParentReferenceKind) || |
- !reference->Parse(value)) { |
- LOG(ERROR) << "Unable to create: Invalid ParentRefernce JSON!"; |
- return scoped_ptr<ParentReference>(); |
- } |
- return reference.Pass(); |
-} |
- |
-bool ParentReference::Parse(const base::Value& value) { |
- base::JSONValueConverter<ParentReference> converter; |
- if (!converter.Convert(value, this)) { |
- LOG(ERROR) << "Unable to parse: Invalid ParentReference"; |
- return false; |
- } |
- return true; |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// FileResource implementation |
- |
-FileResource::FileResource() : file_size_(0) {} |
- |
-FileResource::~FileResource() {} |
- |
-// static |
-void FileResource::RegisterJSONConverter( |
- base::JSONValueConverter<FileResource>* converter) { |
- converter->RegisterStringField(kId, &FileResource::file_id_); |
- converter->RegisterStringField(kETag, &FileResource::etag_); |
- converter->RegisterCustomField<GURL>(kSelfLink, |
- &FileResource::self_link_, |
- GetGURLFromString); |
- converter->RegisterStringField(kTitle, &FileResource::title_); |
- converter->RegisterStringField(kMimeType, &FileResource::mime_type_); |
- converter->RegisterNestedField(kLabels, &FileResource::labels_); |
- converter->RegisterNestedField(kImageMediaMetadata, |
- &FileResource::image_media_metadata_); |
- converter->RegisterCustomField<base::Time>( |
- kCreatedDate, |
- &FileResource::created_date_, |
- &util::GetTimeFromString); |
- converter->RegisterCustomField<base::Time>( |
- kModifiedDate, |
- &FileResource::modified_date_, |
- &util::GetTimeFromString); |
- converter->RegisterCustomField<base::Time>( |
- kModifiedByMeDate, |
- &FileResource::modified_by_me_date_, |
- &util::GetTimeFromString); |
- converter->RegisterCustomField<base::Time>( |
- kLastViewedByMeDate, |
- &FileResource::last_viewed_by_me_date_, |
- &util::GetTimeFromString); |
- converter->RegisterCustomField<base::Time>( |
- kSharedWithMeDate, |
- &FileResource::shared_with_me_date_, |
- &util::GetTimeFromString); |
- converter->RegisterCustomField<GURL>(kDownloadUrl, |
- &FileResource::download_url_, |
- GetGURLFromString); |
- converter->RegisterStringField(kFileExtension, |
- &FileResource::file_extension_); |
- converter->RegisterStringField(kMd5Checksum, &FileResource::md5_checksum_); |
- converter->RegisterCustomField<int64>(kFileSize, |
- &FileResource::file_size_, |
- &base::StringToInt64); |
- converter->RegisterCustomField<GURL>(kAlternateLink, |
- &FileResource::alternate_link_, |
- GetGURLFromString); |
- converter->RegisterCustomField<GURL>(kEmbedLink, |
- &FileResource::embed_link_, |
- GetGURLFromString); |
- converter->RegisterRepeatedMessage<ParentReference>(kParents, |
- &FileResource::parents_); |
- converter->RegisterCustomField<GURL>(kThumbnailLink, |
- &FileResource::thumbnail_link_, |
- GetGURLFromString); |
- converter->RegisterCustomField<GURL>(kWebContentLink, |
- &FileResource::web_content_link_, |
- GetGURLFromString); |
- converter->RegisterCustomValueField<std::vector<OpenWithLink> >( |
- kOpenWithLinks, |
- &FileResource::open_with_links_, |
- GetOpenWithLinksFromDictionaryValue); |
-} |
- |
-// static |
-scoped_ptr<FileResource> FileResource::CreateFrom(const base::Value& value) { |
- scoped_ptr<FileResource> resource(new FileResource()); |
- if (!IsResourceKindExpected(value, kFileKind) || !resource->Parse(value)) { |
- LOG(ERROR) << "Unable to create: Invalid FileResource JSON!"; |
- return scoped_ptr<FileResource>(); |
- } |
- return resource.Pass(); |
-} |
- |
-bool FileResource::IsDirectory() const { |
- return mime_type_ == kDriveFolderMimeType; |
-} |
- |
-bool FileResource::Parse(const base::Value& value) { |
- base::JSONValueConverter<FileResource> converter; |
- if (!converter.Convert(value, this)) { |
- LOG(ERROR) << "Unable to parse: Invalid FileResource"; |
- return false; |
- } |
- return true; |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// FileList implementation |
- |
-FileList::FileList() {} |
- |
-FileList::~FileList() {} |
- |
-// static |
-void FileList::RegisterJSONConverter( |
- base::JSONValueConverter<FileList>* converter) { |
- converter->RegisterStringField(kETag, &FileList::etag_); |
- converter->RegisterStringField(kNextPageToken, &FileList::next_page_token_); |
- converter->RegisterCustomField<GURL>(kNextLink, |
- &FileList::next_link_, |
- GetGURLFromString); |
- converter->RegisterRepeatedMessage<FileResource>(kItems, |
- &FileList::items_); |
-} |
- |
-// static |
-bool FileList::HasFileListKind(const base::Value& value) { |
- return IsResourceKindExpected(value, kFileListKind); |
-} |
- |
-// static |
-scoped_ptr<FileList> FileList::CreateFrom(const base::Value& value) { |
- scoped_ptr<FileList> resource(new FileList()); |
- if (!HasFileListKind(value) || !resource->Parse(value)) { |
- LOG(ERROR) << "Unable to create: Invalid FileList JSON!"; |
- return scoped_ptr<FileList>(); |
- } |
- return resource.Pass(); |
-} |
- |
-bool FileList::Parse(const base::Value& value) { |
- base::JSONValueConverter<FileList> converter; |
- if (!converter.Convert(value, this)) { |
- LOG(ERROR) << "Unable to parse: Invalid FileList"; |
- return false; |
- } |
- return true; |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// ChangeResource implementation |
- |
-ChangeResource::ChangeResource() : change_id_(0), deleted_(false) {} |
- |
-ChangeResource::~ChangeResource() {} |
- |
-// static |
-void ChangeResource::RegisterJSONConverter( |
- base::JSONValueConverter<ChangeResource>* converter) { |
- converter->RegisterCustomField<int64>(kId, |
- &ChangeResource::change_id_, |
- &base::StringToInt64); |
- converter->RegisterStringField(kFileId, &ChangeResource::file_id_); |
- converter->RegisterBoolField(kDeleted, &ChangeResource::deleted_); |
- converter->RegisterCustomValueField(kFile, &ChangeResource::file_, |
- &CreateFileResourceFromValue); |
-} |
- |
-// static |
-scoped_ptr<ChangeResource> |
-ChangeResource::CreateFrom(const base::Value& value) { |
- scoped_ptr<ChangeResource> resource(new ChangeResource()); |
- if (!IsResourceKindExpected(value, kChangeKind) || !resource->Parse(value)) { |
- LOG(ERROR) << "Unable to create: Invalid ChangeResource JSON!"; |
- return scoped_ptr<ChangeResource>(); |
- } |
- return resource.Pass(); |
-} |
- |
-bool ChangeResource::Parse(const base::Value& value) { |
- base::JSONValueConverter<ChangeResource> converter; |
- if (!converter.Convert(value, this)) { |
- LOG(ERROR) << "Unable to parse: Invalid ChangeResource"; |
- return false; |
- } |
- return true; |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// ChangeList implementation |
- |
-ChangeList::ChangeList() : largest_change_id_(0) {} |
- |
-ChangeList::~ChangeList() {} |
- |
-// static |
-void ChangeList::RegisterJSONConverter( |
- base::JSONValueConverter<ChangeList>* converter) { |
- converter->RegisterStringField(kETag, &ChangeList::etag_); |
- converter->RegisterStringField(kNextPageToken, &ChangeList::next_page_token_); |
- converter->RegisterCustomField<GURL>(kNextLink, |
- &ChangeList::next_link_, |
- GetGURLFromString); |
- converter->RegisterCustomField<int64>(kLargestChangeId, |
- &ChangeList::largest_change_id_, |
- &base::StringToInt64); |
- converter->RegisterRepeatedMessage<ChangeResource>(kItems, |
- &ChangeList::items_); |
-} |
- |
-// static |
-bool ChangeList::HasChangeListKind(const base::Value& value) { |
- return IsResourceKindExpected(value, kChangeListKind); |
-} |
- |
-// static |
-scoped_ptr<ChangeList> ChangeList::CreateFrom(const base::Value& value) { |
- scoped_ptr<ChangeList> resource(new ChangeList()); |
- if (!HasChangeListKind(value) || !resource->Parse(value)) { |
- LOG(ERROR) << "Unable to create: Invalid ChangeList JSON!"; |
- return scoped_ptr<ChangeList>(); |
- } |
- return resource.Pass(); |
-} |
- |
-bool ChangeList::Parse(const base::Value& value) { |
- base::JSONValueConverter<ChangeList> converter; |
- if (!converter.Convert(value, this)) { |
- LOG(ERROR) << "Unable to parse: Invalid ChangeList"; |
- return false; |
- } |
- return true; |
-} |
- |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// FileLabels implementation |
- |
-FileLabels::FileLabels() |
- : starred_(false), |
- hidden_(false), |
- trashed_(false), |
- restricted_(false), |
- viewed_(false) {} |
- |
-FileLabels::~FileLabels() {} |
- |
-// static |
-void FileLabels::RegisterJSONConverter( |
- base::JSONValueConverter<FileLabels>* converter) { |
- converter->RegisterBoolField(kLabelStarred, &FileLabels::starred_); |
- converter->RegisterBoolField(kLabelHidden, &FileLabels::hidden_); |
- converter->RegisterBoolField(kLabelTrashed, &FileLabels::trashed_); |
- converter->RegisterBoolField(kLabelRestricted, &FileLabels::restricted_); |
- converter->RegisterBoolField(kLabelViewed, &FileLabels::viewed_); |
-} |
- |
-// static |
-scoped_ptr<FileLabels> FileLabels::CreateFrom(const base::Value& value) { |
- scoped_ptr<FileLabels> resource(new FileLabels()); |
- if (!resource->Parse(value)) { |
- LOG(ERROR) << "Unable to create: Invalid FileLabels JSON!"; |
- return scoped_ptr<FileLabels>(); |
- } |
- return resource.Pass(); |
-} |
- |
-bool FileLabels::Parse(const base::Value& value) { |
- base::JSONValueConverter<FileLabels> converter; |
- if (!converter.Convert(value, this)) { |
- LOG(ERROR) << "Unable to parse: Invalid FileLabels."; |
- return false; |
- } |
- return true; |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// ImageMediaMetadata implementation |
- |
-ImageMediaMetadata::ImageMediaMetadata() |
- : width_(-1), |
- height_(-1), |
- rotation_(-1) {} |
- |
-ImageMediaMetadata::~ImageMediaMetadata() {} |
- |
-// static |
-void ImageMediaMetadata::RegisterJSONConverter( |
- base::JSONValueConverter<ImageMediaMetadata>* converter) { |
- converter->RegisterIntField(kImageMediaMetadataWidth, |
- &ImageMediaMetadata::width_); |
- converter->RegisterIntField(kImageMediaMetadataHeight, |
- &ImageMediaMetadata::height_); |
- converter->RegisterIntField(kImageMediaMetadataRotation, |
- &ImageMediaMetadata::rotation_); |
-} |
- |
-// static |
-scoped_ptr<ImageMediaMetadata> ImageMediaMetadata::CreateFrom( |
- const base::Value& value) { |
- scoped_ptr<ImageMediaMetadata> resource(new ImageMediaMetadata()); |
- if (!resource->Parse(value)) { |
- LOG(ERROR) << "Unable to create: Invalid ImageMediaMetadata JSON!"; |
- return scoped_ptr<ImageMediaMetadata>(); |
- } |
- return resource.Pass(); |
-} |
- |
-bool ImageMediaMetadata::Parse(const base::Value& value) { |
- return true; |
- base::JSONValueConverter<ImageMediaMetadata> converter; |
- if (!converter.Convert(value, this)) { |
- LOG(ERROR) << "Unable to parse: Invalid ImageMediaMetadata."; |
- return false; |
- } |
- return true; |
-} |
- |
-} // namespace google_apis |