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

Side by Side Diff: chrome/browser/chromeos/gdata/drive_file_system.cc

Issue 10880075: drive: Fix a crash caused by an empty edit URL (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: minor fix Created 8 years, 3 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/gdata/drive_file_system.h" 5 #include "chrome/browser/chromeos/gdata/drive_file_system.h"
6 6
7 #include <set> 7 #include <set>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 1209 matching lines...) Expand 10 before | Expand all | Expand 10 after
1220 callback, 1220 callback,
1221 file_path, 1221 file_path,
1222 dir_path)); 1222 dir_path));
1223 } 1223 }
1224 1224
1225 void DriveFileSystem::Remove(const FilePath& file_path, 1225 void DriveFileSystem::Remove(const FilePath& file_path,
1226 bool is_recursive, 1226 bool is_recursive,
1227 const FileOperationCallback& callback) { 1227 const FileOperationCallback& callback) {
1228 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) || 1228 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) ||
1229 BrowserThread::CurrentlyOn(BrowserThread::IO)); 1229 BrowserThread::CurrentlyOn(BrowserThread::IO));
1230 DCHECK(!callback.is_null());
1231
1230 RunTaskOnUIThread(base::Bind(&DriveFileSystem::RemoveOnUIThread, 1232 RunTaskOnUIThread(base::Bind(&DriveFileSystem::RemoveOnUIThread,
1231 ui_weak_ptr_, 1233 ui_weak_ptr_,
1232 file_path, 1234 file_path,
1233 CreateRelayCallback(callback))); 1235 CreateRelayCallback(callback)));
1234 } 1236 }
1235 1237
1236 void DriveFileSystem::RemoveOnUIThread( 1238 void DriveFileSystem::RemoveOnUIThread(
1237 const FilePath& file_path, 1239 const FilePath& file_path,
1238 const FileOperationCallback& callback) { 1240 const FileOperationCallback& callback) {
1239 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1241 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1242 DCHECK(!callback.is_null());
1240 1243
1241 // Get the edit URL of an entry at |file_path|. 1244 // Get the edit URL of an entry at |file_path|.
1242 resource_metadata_->GetEntryInfoByPath( 1245 resource_metadata_->GetEntryInfoByPath(
1243 file_path, 1246 file_path,
1244 base::Bind( 1247 base::Bind(
1245 &DriveFileSystem::RemoveOnUIThreadAfterGetEntryInfo, 1248 &DriveFileSystem::RemoveOnUIThreadAfterGetEntryInfo,
1246 ui_weak_ptr_, 1249 ui_weak_ptr_,
1247 callback)); 1250 callback));
1248 } 1251 }
1249 1252
1250 void DriveFileSystem::RemoveOnUIThreadAfterGetEntryInfo( 1253 void DriveFileSystem::RemoveOnUIThreadAfterGetEntryInfo(
1251 const FileOperationCallback& callback, 1254 const FileOperationCallback& callback,
1252 DriveFileError error, 1255 DriveFileError error,
1253 scoped_ptr<DriveEntryProto> entry_proto) { 1256 scoped_ptr<DriveEntryProto> entry_proto) {
1254 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1257 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1258 DCHECK(!callback.is_null());
1255 1259
1256 if (error != DRIVE_FILE_OK) { 1260 if (error != DRIVE_FILE_OK) {
1257 if (!callback.is_null()) { 1261 callback.Run(error);
1258 base::MessageLoopProxy::current()->PostTask( 1262 return;
1259 FROM_HERE, base::Bind(callback, error)); 1263 }
1260 } 1264 DCHECK(entry_proto.get());
1265
1266 // The edit URL can be empty for some reason.
1267 if (entry_proto->edit_url().empty()) {
1268 callback.Run(DRIVE_FILE_ERROR_NOT_FOUND);
1261 return; 1269 return;
1262 } 1270 }
1263 1271
1264 DCHECK(entry_proto.get());
1265 drive_service_->DeleteDocument( 1272 drive_service_->DeleteDocument(
1266 GURL(entry_proto->edit_url()), 1273 GURL(entry_proto->edit_url()),
1267 base::Bind(&DriveFileSystem::RemoveResourceLocally, 1274 base::Bind(&DriveFileSystem::RemoveResourceLocally,
1268 ui_weak_ptr_, 1275 ui_weak_ptr_,
1269 callback, 1276 callback,
1270 entry_proto->resource_id())); 1277 entry_proto->resource_id()));
1271 } 1278 }
1272 1279
1273 void DriveFileSystem::CreateDirectory( 1280 void DriveFileSystem::CreateDirectory(
1274 const FilePath& directory_path, 1281 const FilePath& directory_path,
(...skipping 1157 matching lines...) Expand 10 before | Expand all | Expand 10 after
2432 2439
2433 callback.Run(error); 2440 callback.Run(error);
2434 } 2441 }
2435 2442
2436 void DriveFileSystem::RemoveResourceLocally( 2443 void DriveFileSystem::RemoveResourceLocally(
2437 const FileOperationCallback& callback, 2444 const FileOperationCallback& callback,
2438 const std::string& resource_id, 2445 const std::string& resource_id,
2439 GDataErrorCode status, 2446 GDataErrorCode status,
2440 const GURL& /* document_url */) { 2447 const GURL& /* document_url */) {
2441 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2448 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
2449 DCHECK(!callback.is_null());
2442 2450
2443 DriveFileError error = util::GDataToDriveFileError(status); 2451 DriveFileError error = util::GDataToDriveFileError(status);
2444 if (error != DRIVE_FILE_OK) { 2452 if (error != DRIVE_FILE_OK) {
2445 if (!callback.is_null()) 2453 callback.Run(error);
2446 callback.Run(error);
2447 return; 2454 return;
2448 } 2455 }
2449 2456
2450 resource_metadata_->RemoveEntryFromParent( 2457 resource_metadata_->RemoveEntryFromParent(
2451 resource_id, 2458 resource_id,
2452 base::Bind(&DriveFileSystem::OnDirectoryChangeFileMoveCallback, 2459 base::Bind(&DriveFileSystem::OnDirectoryChangeFileMoveCallback,
2453 ui_weak_ptr_, 2460 ui_weak_ptr_,
2454 callback)); 2461 callback));
2455 2462
2456 cache_->RemoveOnUIThread(resource_id, CacheOperationCallback()); 2463 cache_->RemoveOnUIThread(resource_id, CacheOperationCallback());
(...skipping 848 matching lines...) Expand 10 before | Expand all | Expand 10 after
3305 return; 3312 return;
3306 } 3313 }
3307 3314
3308 PlatformFileInfoProto entry_file_info; 3315 PlatformFileInfoProto entry_file_info;
3309 DriveEntry::ConvertPlatformFileInfoToProto(*file_info, &entry_file_info); 3316 DriveEntry::ConvertPlatformFileInfoToProto(*file_info, &entry_file_info);
3310 *entry_proto->mutable_file_info() = entry_file_info; 3317 *entry_proto->mutable_file_info() = entry_file_info;
3311 callback.Run(DRIVE_FILE_OK, entry_proto.Pass()); 3318 callback.Run(DRIVE_FILE_OK, entry_proto.Pass());
3312 } 3319 }
3313 3320
3314 } // namespace gdata 3321 } // namespace gdata
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/gdata/drive_file_system.h ('k') | chrome/browser/chromeos/gdata/drive_file_system_interface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698