Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(302)

Unified Diff: chrome/browser/drive/fake_drive_service.cc

Issue 445793003: Add permission check to FakeDriveService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/drive/fake_drive_service.h ('k') | chrome/browser/drive/fake_drive_service_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/drive/fake_drive_service.cc
diff --git a/chrome/browser/drive/fake_drive_service.cc b/chrome/browser/drive/fake_drive_service.cc
index e8e02add61666ddfa6f806b8d6a4619cd65582bd..a38fa47b7ad80d7b975053d87342c44ee5c55046 100644
--- a/chrome/browser/drive/fake_drive_service.cc
+++ b/chrome/browser/drive/fake_drive_service.cc
@@ -50,6 +50,7 @@ using google_apis::GetContentCallback;
using google_apis::GetShareUrlCallback;
using google_apis::HTTP_BAD_REQUEST;
using google_apis::HTTP_CREATED;
+using google_apis::HTTP_FORBIDDEN;
using google_apis::HTTP_NOT_FOUND;
using google_apis::HTTP_NO_CONTENT;
using google_apis::HTTP_PRECONDITION;
@@ -131,12 +132,30 @@ void FileListCallbackAdapter(const FileListCallback& callback,
callback.Run(error, file_list.Pass());
}
+bool UserHasWriteAccess(google_apis::drive::PermissionRole user_permission) {
+ switch (user_permission) {
+ case google_apis::drive::PERMISSION_ROLE_OWNER:
+ case google_apis::drive::PERMISSION_ROLE_WRITER:
+ return true;
+ case google_apis::drive::PERMISSION_ROLE_READER:
+ case google_apis::drive::PERMISSION_ROLE_COMMENTER:
+ break;
+ }
+ return false;
+}
+
} // namespace
struct FakeDriveService::EntryInfo {
+ EntryInfo() : user_permission(google_apis::drive::PERMISSION_ROLE_OWNER) {}
+
google_apis::ChangeResource change_resource;
GURL share_url;
std::string content_data;
+
+ // Behaves in the same way as "userPermission" described in
+ // https://developers.google.com/drive/v2/reference/files
+ google_apis::drive::PermissionRole user_permission;
};
struct FakeDriveService::UploadSession {
@@ -609,6 +628,12 @@ CancelCallback FakeDriveService::DeleteResource(
return CancelCallback();
}
+ if (entry->user_permission != google_apis::drive::PERMISSION_ROLE_OWNER) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(callback, HTTP_FORBIDDEN));
+ return CancelCallback();
+ }
+
change->set_deleted(true);
AddNewChangestamp(change);
change->set_file(scoped_ptr<FileResource>());
@@ -641,6 +666,9 @@ CancelCallback FakeDriveService::TrashResource(
GDataErrorCode error = google_apis::GDATA_OTHER_ERROR;
if (change->is_deleted() || file->labels().is_trashed()) {
error = HTTP_NOT_FOUND;
+ } else if (entry->user_permission !=
+ google_apis::drive::PERMISSION_ROLE_OWNER) {
+ error = HTTP_FORBIDDEN;
} else {
file->mutable_labels()->set_trashed(true);
AddNewChangestamp(change);
@@ -814,6 +842,14 @@ CancelCallback FakeDriveService::UpdateResource(
EntryInfo* entry = FindEntryByResourceId(resource_id);
if (entry) {
+ if (!UserHasWriteAccess(entry->user_permission)) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(callback, HTTP_FORBIDDEN,
+ base::Passed(scoped_ptr<FileResource>())));
+ return CancelCallback();
+ }
+
ChangeResource* change = &entry->change_resource;
FileResource* file = change->mutable_file();
@@ -1000,6 +1036,13 @@ CancelCallback FakeDriveService::InitiateUploadExistingFile(
return CancelCallback();
}
+ if (!UserHasWriteAccess(entry->user_permission)) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(callback, HTTP_FORBIDDEN, GURL()));
+ return CancelCallback();
+ }
+
FileResource* file = entry->change_resource.mutable_file();
if (!options.etag.empty() && options.etag != file->etag()) {
base::MessageLoop::current()->PostTask(
@@ -1316,6 +1359,19 @@ void FakeDriveService::SetLastModifiedTime(
base::Passed(make_scoped_ptr(new FileResource(*file)))));
}
+google_apis::GDataErrorCode FakeDriveService::SetUserPermission(
+ const std::string& resource_id,
+ google_apis::drive::PermissionRole user_permission) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ EntryInfo* entry = FindEntryByResourceId(resource_id);
+ if (!entry)
+ return HTTP_NOT_FOUND;
+
+ entry->user_permission = user_permission;
+ return HTTP_SUCCESS;
+}
+
FakeDriveService::EntryInfo* FakeDriveService::FindEntryByResourceId(
const std::string& resource_id) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
« no previous file with comments | « chrome/browser/drive/fake_drive_service.h ('k') | chrome/browser/drive/fake_drive_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698