| OLD | NEW |
| 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/google_apis/gdata_wapi_service.h" | 5 #include "chrome/browser/google_apis/gdata_wapi_service.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/message_loop.h" | 11 #include "base/message_loop.h" |
| 12 #include "base/stringprintf.h" | 12 #include "base/stringprintf.h" |
| 13 #include "base/values.h" | 13 #include "base/values.h" |
| 14 #include "chrome/browser/google_apis/auth_service.h" | 14 #include "chrome/browser/google_apis/auth_service.h" |
| 15 #include "chrome/browser/google_apis/drive_api_parser.h" | 15 #include "chrome/browser/google_apis/drive_api_parser.h" |
| 16 #include "chrome/browser/google_apis/drive_api_util.h" | 16 #include "chrome/browser/google_apis/drive_api_util.h" |
| 17 #include "chrome/browser/google_apis/gdata_wapi_operations.h" | 17 #include "chrome/browser/google_apis/gdata_wapi_operations.h" |
| 18 #include "chrome/browser/google_apis/gdata_wapi_parser.h" | 18 #include "chrome/browser/google_apis/gdata_wapi_parser.h" |
| 19 #include "chrome/browser/google_apis/gdata_wapi_url_generator.h" | 19 #include "chrome/browser/google_apis/gdata_wapi_url_generator.h" |
| 20 #include "chrome/browser/google_apis/operation_runner.h" | 20 #include "chrome/browser/google_apis/request_sender.h" |
| 21 #include "chrome/browser/google_apis/time_util.h" | 21 #include "chrome/browser/google_apis/time_util.h" |
| 22 #include "content/public/browser/browser_thread.h" | 22 #include "content/public/browser/browser_thread.h" |
| 23 #include "net/base/url_util.h" | 23 #include "net/base/url_util.h" |
| 24 | 24 |
| 25 using content::BrowserThread; | 25 using content::BrowserThread; |
| 26 | 26 |
| 27 namespace google_apis { | 27 namespace google_apis { |
| 28 | 28 |
| 29 namespace { | 29 namespace { |
| 30 | 30 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 callback.Run(error, app_list.Pass()); | 91 callback.Run(error, app_list.Pass()); |
| 92 } | 92 } |
| 93 | 93 |
| 94 } // namespace | 94 } // namespace |
| 95 | 95 |
| 96 GDataWapiService::GDataWapiService( | 96 GDataWapiService::GDataWapiService( |
| 97 net::URLRequestContextGetter* url_request_context_getter, | 97 net::URLRequestContextGetter* url_request_context_getter, |
| 98 const GURL& base_url, | 98 const GURL& base_url, |
| 99 const std::string& custom_user_agent) | 99 const std::string& custom_user_agent) |
| 100 : url_request_context_getter_(url_request_context_getter), | 100 : url_request_context_getter_(url_request_context_getter), |
| 101 runner_(NULL), | 101 sender_(NULL), |
| 102 url_generator_(base_url), | 102 url_generator_(base_url), |
| 103 custom_user_agent_(custom_user_agent) { | 103 custom_user_agent_(custom_user_agent) { |
| 104 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 104 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 105 } | 105 } |
| 106 | 106 |
| 107 GDataWapiService::~GDataWapiService() { | 107 GDataWapiService::~GDataWapiService() { |
| 108 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 108 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 109 if (runner_.get()) | 109 if (sender_.get()) |
| 110 runner_->auth_service()->RemoveObserver(this); | 110 sender_->auth_service()->RemoveObserver(this); |
| 111 } | 111 } |
| 112 | 112 |
| 113 AuthService* GDataWapiService::auth_service_for_testing() { | 113 AuthService* GDataWapiService::auth_service_for_testing() { |
| 114 return runner_->auth_service(); | 114 return sender_->auth_service(); |
| 115 } | 115 } |
| 116 | 116 |
| 117 void GDataWapiService::Initialize(Profile* profile) { | 117 void GDataWapiService::Initialize(Profile* profile) { |
| 118 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 118 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 119 | 119 |
| 120 std::vector<std::string> scopes; | 120 std::vector<std::string> scopes; |
| 121 scopes.push_back(kDocsListScope); | 121 scopes.push_back(kDocsListScope); |
| 122 scopes.push_back(kSpreadsheetsScope); | 122 scopes.push_back(kSpreadsheetsScope); |
| 123 scopes.push_back(kUserContentScope); | 123 scopes.push_back(kUserContentScope); |
| 124 // Drive App scope is required for even WAPI v3 apps access. | 124 // Drive App scope is required for even WAPI v3 apps access. |
| 125 scopes.push_back(kDriveAppsScope); | 125 scopes.push_back(kDriveAppsScope); |
| 126 runner_.reset(new OperationRunner(profile, | 126 sender_.reset(new RequestSender(profile, |
| 127 url_request_context_getter_, | 127 url_request_context_getter_, |
| 128 scopes, | 128 scopes, |
| 129 custom_user_agent_)); | 129 custom_user_agent_)); |
| 130 runner_->Initialize(); | 130 sender_->Initialize(); |
| 131 | 131 |
| 132 runner_->auth_service()->AddObserver(this); | 132 sender_->auth_service()->AddObserver(this); |
| 133 } | 133 } |
| 134 | 134 |
| 135 void GDataWapiService::AddObserver(DriveServiceObserver* observer) { | 135 void GDataWapiService::AddObserver(DriveServiceObserver* observer) { |
| 136 observers_.AddObserver(observer); | 136 observers_.AddObserver(observer); |
| 137 } | 137 } |
| 138 | 138 |
| 139 void GDataWapiService::RemoveObserver(DriveServiceObserver* observer) { | 139 void GDataWapiService::RemoveObserver(DriveServiceObserver* observer) { |
| 140 observers_.RemoveObserver(observer); | 140 observers_.RemoveObserver(observer); |
| 141 } | 141 } |
| 142 | 142 |
| 143 bool GDataWapiService::CanStartOperation() const { | 143 bool GDataWapiService::CanStartOperation() const { |
| 144 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 144 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 145 | 145 |
| 146 return HasRefreshToken(); | 146 return HasRefreshToken(); |
| 147 } | 147 } |
| 148 | 148 |
| 149 void GDataWapiService::CancelAll() { | 149 void GDataWapiService::CancelAll() { |
| 150 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 150 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 151 runner_->CancelAll(); | 151 sender_->CancelAll(); |
| 152 } | 152 } |
| 153 | 153 |
| 154 bool GDataWapiService::CancelForFilePath(const base::FilePath& file_path) { | 154 bool GDataWapiService::CancelForFilePath(const base::FilePath& file_path) { |
| 155 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 155 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 156 return runner_->operation_registry()->CancelForFilePath(file_path); | 156 return sender_->operation_registry()->CancelForFilePath(file_path); |
| 157 } | 157 } |
| 158 | 158 |
| 159 std::string GDataWapiService::CanonicalizeResourceId( | 159 std::string GDataWapiService::CanonicalizeResourceId( |
| 160 const std::string& resource_id) const { | 160 const std::string& resource_id) const { |
| 161 return resource_id; | 161 return resource_id; |
| 162 } | 162 } |
| 163 | 163 |
| 164 std::string GDataWapiService::GetRootResourceId() const { | 164 std::string GDataWapiService::GetRootResourceId() const { |
| 165 return kWapiRootDirectoryResourceId; | 165 return kWapiRootDirectoryResourceId; |
| 166 } | 166 } |
| 167 | 167 |
| 168 // Because GData WAPI support is expected to be gone somehow soon by migration | 168 // Because GData WAPI support is expected to be gone somehow soon by migration |
| 169 // to the Drive API v2, so we'll reuse GetResourceListOperation to implement | 169 // to the Drive API v2, so we'll reuse GetResourceListOperation to implement |
| 170 // following methods, instead of cleaning the operation class. | 170 // following methods, instead of cleaning the operation class. |
| 171 | 171 |
| 172 void GDataWapiService::GetAllResourceList( | 172 void GDataWapiService::GetAllResourceList( |
| 173 const GetResourceListCallback& callback) { | 173 const GetResourceListCallback& callback) { |
| 174 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 174 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 175 DCHECK(!callback.is_null()); | 175 DCHECK(!callback.is_null()); |
| 176 | 176 |
| 177 runner_->StartOperationWithRetry( | 177 sender_->StartRequestWithRetry( |
| 178 new GetResourceListOperation(runner_.get(), | 178 new GetResourceListOperation(sender_.get(), |
| 179 url_request_context_getter_, | 179 url_request_context_getter_, |
| 180 url_generator_, | 180 url_generator_, |
| 181 GURL(), // No override url | 181 GURL(), // No override url |
| 182 0, // start changestamp | 182 0, // start changestamp |
| 183 std::string(), // empty search query | 183 std::string(), // empty search query |
| 184 std::string(), // no directory resource id | 184 std::string(), // no directory resource id |
| 185 callback)); | 185 callback)); |
| 186 } | 186 } |
| 187 | 187 |
| 188 void GDataWapiService::GetResourceListInDirectory( | 188 void GDataWapiService::GetResourceListInDirectory( |
| 189 const std::string& directory_resource_id, | 189 const std::string& directory_resource_id, |
| 190 const GetResourceListCallback& callback) { | 190 const GetResourceListCallback& callback) { |
| 191 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 191 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 192 DCHECK(!directory_resource_id.empty()); | 192 DCHECK(!directory_resource_id.empty()); |
| 193 DCHECK(!callback.is_null()); | 193 DCHECK(!callback.is_null()); |
| 194 | 194 |
| 195 runner_->StartOperationWithRetry( | 195 sender_->StartRequestWithRetry( |
| 196 new GetResourceListOperation(runner_.get(), | 196 new GetResourceListOperation(sender_.get(), |
| 197 url_request_context_getter_, | 197 url_request_context_getter_, |
| 198 url_generator_, | 198 url_generator_, |
| 199 GURL(), // No override url | 199 GURL(), // No override url |
| 200 0, // start changestamp | 200 0, // start changestamp |
| 201 std::string(), // empty search query | 201 std::string(), // empty search query |
| 202 directory_resource_id, | 202 directory_resource_id, |
| 203 callback)); | 203 callback)); |
| 204 } | 204 } |
| 205 | 205 |
| 206 void GDataWapiService::Search(const std::string& search_query, | 206 void GDataWapiService::Search(const std::string& search_query, |
| 207 const GetResourceListCallback& callback) { | 207 const GetResourceListCallback& callback) { |
| 208 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 208 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 209 DCHECK(!search_query.empty()); | 209 DCHECK(!search_query.empty()); |
| 210 DCHECK(!callback.is_null()); | 210 DCHECK(!callback.is_null()); |
| 211 | 211 |
| 212 runner_->StartOperationWithRetry( | 212 sender_->StartRequestWithRetry( |
| 213 new GetResourceListOperation(runner_.get(), | 213 new GetResourceListOperation(sender_.get(), |
| 214 url_request_context_getter_, | 214 url_request_context_getter_, |
| 215 url_generator_, | 215 url_generator_, |
| 216 GURL(), // No override url | 216 GURL(), // No override url |
| 217 0, // start changestamp | 217 0, // start changestamp |
| 218 search_query, | 218 search_query, |
| 219 std::string(), // no directory resource id | 219 std::string(), // no directory resource id |
| 220 callback)); | 220 callback)); |
| 221 } | 221 } |
| 222 | 222 |
| 223 void GDataWapiService::SearchByTitle( | 223 void GDataWapiService::SearchByTitle( |
| 224 const std::string& title, | 224 const std::string& title, |
| 225 const std::string& directory_resource_id, | 225 const std::string& directory_resource_id, |
| 226 const GetResourceListCallback& callback) { | 226 const GetResourceListCallback& callback) { |
| 227 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 227 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 228 DCHECK(!title.empty()); | 228 DCHECK(!title.empty()); |
| 229 DCHECK(!callback.is_null()); | 229 DCHECK(!callback.is_null()); |
| 230 | 230 |
| 231 runner_->StartOperationWithRetry( | 231 sender_->StartRequestWithRetry( |
| 232 new SearchByTitleOperation( | 232 new SearchByTitleOperation( |
| 233 runner_.get(), | 233 sender_.get(), |
| 234 url_request_context_getter_, | 234 url_request_context_getter_, |
| 235 url_generator_, | 235 url_generator_, |
| 236 title, | 236 title, |
| 237 directory_resource_id, | 237 directory_resource_id, |
| 238 callback)); | 238 callback)); |
| 239 } | 239 } |
| 240 | 240 |
| 241 void GDataWapiService::GetChangeList(int64 start_changestamp, | 241 void GDataWapiService::GetChangeList(int64 start_changestamp, |
| 242 const GetResourceListCallback& callback) { | 242 const GetResourceListCallback& callback) { |
| 243 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 243 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 244 DCHECK(!callback.is_null()); | 244 DCHECK(!callback.is_null()); |
| 245 | 245 |
| 246 runner_->StartOperationWithRetry( | 246 sender_->StartRequestWithRetry( |
| 247 new GetResourceListOperation(runner_.get(), | 247 new GetResourceListOperation(sender_.get(), |
| 248 url_request_context_getter_, | 248 url_request_context_getter_, |
| 249 url_generator_, | 249 url_generator_, |
| 250 GURL(), // No override url | 250 GURL(), // No override url |
| 251 start_changestamp, | 251 start_changestamp, |
| 252 std::string(), // empty search query | 252 std::string(), // empty search query |
| 253 std::string(), // no directory resource id | 253 std::string(), // no directory resource id |
| 254 callback)); | 254 callback)); |
| 255 } | 255 } |
| 256 | 256 |
| 257 void GDataWapiService::ContinueGetResourceList( | 257 void GDataWapiService::ContinueGetResourceList( |
| 258 const GURL& override_url, | 258 const GURL& override_url, |
| 259 const GetResourceListCallback& callback) { | 259 const GetResourceListCallback& callback) { |
| 260 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 260 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 261 DCHECK(!override_url.is_empty()); | 261 DCHECK(!override_url.is_empty()); |
| 262 DCHECK(!callback.is_null()); | 262 DCHECK(!callback.is_null()); |
| 263 | 263 |
| 264 runner_->StartOperationWithRetry( | 264 sender_->StartRequestWithRetry( |
| 265 new GetResourceListOperation(runner_.get(), | 265 new GetResourceListOperation(sender_.get(), |
| 266 url_request_context_getter_, | 266 url_request_context_getter_, |
| 267 url_generator_, | 267 url_generator_, |
| 268 override_url, | 268 override_url, |
| 269 0, // start changestamp | 269 0, // start changestamp |
| 270 std::string(), // empty search query | 270 std::string(), // empty search query |
| 271 std::string(), // no directory resource id | 271 std::string(), // no directory resource id |
| 272 callback)); | 272 callback)); |
| 273 } | 273 } |
| 274 | 274 |
| 275 void GDataWapiService::GetResourceEntry( | 275 void GDataWapiService::GetResourceEntry( |
| 276 const std::string& resource_id, | 276 const std::string& resource_id, |
| 277 const GetResourceEntryCallback& callback) { | 277 const GetResourceEntryCallback& callback) { |
| 278 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 278 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 279 DCHECK(!callback.is_null()); | 279 DCHECK(!callback.is_null()); |
| 280 | 280 |
| 281 runner_->StartOperationWithRetry( | 281 sender_->StartRequestWithRetry( |
| 282 new GetResourceEntryOperation( | 282 new GetResourceEntryOperation( |
| 283 runner_.get(), | 283 sender_.get(), |
| 284 url_request_context_getter_, | 284 url_request_context_getter_, |
| 285 url_generator_, | 285 url_generator_, |
| 286 resource_id, | 286 resource_id, |
| 287 base::Bind(&ParseResourceEntryAndRun, callback))); | 287 base::Bind(&ParseResourceEntryAndRun, callback))); |
| 288 } | 288 } |
| 289 | 289 |
| 290 void GDataWapiService::GetAboutResource( | 290 void GDataWapiService::GetAboutResource( |
| 291 const GetAboutResourceCallback& callback) { | 291 const GetAboutResourceCallback& callback) { |
| 292 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 292 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 293 DCHECK(!callback.is_null()); | 293 DCHECK(!callback.is_null()); |
| 294 | 294 |
| 295 runner_->StartOperationWithRetry( | 295 sender_->StartRequestWithRetry( |
| 296 new GetAccountMetadataOperation( | 296 new GetAccountMetadataOperation( |
| 297 runner_.get(), | 297 sender_.get(), |
| 298 url_request_context_getter_, | 298 url_request_context_getter_, |
| 299 url_generator_, | 299 url_generator_, |
| 300 base::Bind(&ParseAboutResourceAndRun, callback), | 300 base::Bind(&ParseAboutResourceAndRun, callback), |
| 301 false)); // Exclude installed apps. | 301 false)); // Exclude installed apps. |
| 302 } | 302 } |
| 303 | 303 |
| 304 void GDataWapiService::GetAppList(const GetAppListCallback& callback) { | 304 void GDataWapiService::GetAppList(const GetAppListCallback& callback) { |
| 305 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 305 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 306 DCHECK(!callback.is_null()); | 306 DCHECK(!callback.is_null()); |
| 307 | 307 |
| 308 runner_->StartOperationWithRetry( | 308 sender_->StartRequestWithRetry( |
| 309 new GetAccountMetadataOperation( | 309 new GetAccountMetadataOperation( |
| 310 runner_.get(), | 310 sender_.get(), |
| 311 url_request_context_getter_, | 311 url_request_context_getter_, |
| 312 url_generator_, | 312 url_generator_, |
| 313 base::Bind(&ParseAppListAndRun, callback), | 313 base::Bind(&ParseAppListAndRun, callback), |
| 314 true)); // Include installed apps. | 314 true)); // Include installed apps. |
| 315 } | 315 } |
| 316 | 316 |
| 317 void GDataWapiService::DownloadFile( | 317 void GDataWapiService::DownloadFile( |
| 318 const base::FilePath& virtual_path, | 318 const base::FilePath& virtual_path, |
| 319 const base::FilePath& local_cache_path, | 319 const base::FilePath& local_cache_path, |
| 320 const GURL& download_url, | 320 const GURL& download_url, |
| 321 const DownloadActionCallback& download_action_callback, | 321 const DownloadActionCallback& download_action_callback, |
| 322 const GetContentCallback& get_content_callback, | 322 const GetContentCallback& get_content_callback, |
| 323 const ProgressCallback& progress_callback) { | 323 const ProgressCallback& progress_callback) { |
| 324 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 324 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 325 DCHECK(!download_action_callback.is_null()); | 325 DCHECK(!download_action_callback.is_null()); |
| 326 // get_content_callback and progress_callback may be null. | 326 // get_content_callback and progress_callback may be null. |
| 327 | 327 |
| 328 runner_->StartOperationWithRetry( | 328 sender_->StartRequestWithRetry( |
| 329 new DownloadFileRequest(runner_.get(), | 329 new DownloadFileRequest(sender_.get(), |
| 330 url_request_context_getter_, | 330 url_request_context_getter_, |
| 331 download_action_callback, | 331 download_action_callback, |
| 332 get_content_callback, | 332 get_content_callback, |
| 333 progress_callback, | 333 progress_callback, |
| 334 download_url, | 334 download_url, |
| 335 virtual_path, | 335 virtual_path, |
| 336 local_cache_path)); | 336 local_cache_path)); |
| 337 } | 337 } |
| 338 | 338 |
| 339 void GDataWapiService::DeleteResource( | 339 void GDataWapiService::DeleteResource( |
| 340 const std::string& resource_id, | 340 const std::string& resource_id, |
| 341 const std::string& etag, | 341 const std::string& etag, |
| 342 const EntryActionCallback& callback) { | 342 const EntryActionCallback& callback) { |
| 343 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 343 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 344 DCHECK(!callback.is_null()); | 344 DCHECK(!callback.is_null()); |
| 345 | 345 |
| 346 runner_->StartOperationWithRetry( | 346 sender_->StartRequestWithRetry( |
| 347 new DeleteResourceOperation(runner_.get(), | 347 new DeleteResourceOperation(sender_.get(), |
| 348 url_request_context_getter_, | 348 url_request_context_getter_, |
| 349 url_generator_, | 349 url_generator_, |
| 350 callback, | 350 callback, |
| 351 resource_id, | 351 resource_id, |
| 352 etag)); | 352 etag)); |
| 353 } | 353 } |
| 354 | 354 |
| 355 void GDataWapiService::AddNewDirectory( | 355 void GDataWapiService::AddNewDirectory( |
| 356 const std::string& parent_resource_id, | 356 const std::string& parent_resource_id, |
| 357 const std::string& directory_name, | 357 const std::string& directory_name, |
| 358 const GetResourceEntryCallback& callback) { | 358 const GetResourceEntryCallback& callback) { |
| 359 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 359 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 360 DCHECK(!callback.is_null()); | 360 DCHECK(!callback.is_null()); |
| 361 | 361 |
| 362 runner_->StartOperationWithRetry( | 362 sender_->StartRequestWithRetry( |
| 363 new CreateDirectoryOperation(runner_.get(), | 363 new CreateDirectoryOperation(sender_.get(), |
| 364 url_request_context_getter_, | 364 url_request_context_getter_, |
| 365 url_generator_, | 365 url_generator_, |
| 366 base::Bind(&ParseResourceEntryAndRun, | 366 base::Bind(&ParseResourceEntryAndRun, |
| 367 callback), | 367 callback), |
| 368 parent_resource_id, | 368 parent_resource_id, |
| 369 directory_name)); | 369 directory_name)); |
| 370 } | 370 } |
| 371 | 371 |
| 372 void GDataWapiService::CopyResource( | 372 void GDataWapiService::CopyResource( |
| 373 const std::string& resource_id, | 373 const std::string& resource_id, |
| 374 const std::string& parent_resource_id, | 374 const std::string& parent_resource_id, |
| 375 const std::string& new_name, | 375 const std::string& new_name, |
| 376 const GetResourceEntryCallback& callback) { | 376 const GetResourceEntryCallback& callback) { |
| 377 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 377 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 378 DCHECK(!callback.is_null()); | 378 DCHECK(!callback.is_null()); |
| 379 | 379 |
| 380 // GData WAPI doesn't support "copy" of regular files. | 380 // GData WAPI doesn't support "copy" of regular files. |
| 381 // This method should never be called if GData WAPI is enabled. | 381 // This method should never be called if GData WAPI is enabled. |
| 382 // Instead, client code should download the file (if needed) and upload it. | 382 // Instead, client code should download the file (if needed) and upload it. |
| 383 NOTREACHED(); | 383 NOTREACHED(); |
| 384 } | 384 } |
| 385 | 385 |
| 386 void GDataWapiService::CopyHostedDocument( | 386 void GDataWapiService::CopyHostedDocument( |
| 387 const std::string& resource_id, | 387 const std::string& resource_id, |
| 388 const std::string& new_name, | 388 const std::string& new_name, |
| 389 const GetResourceEntryCallback& callback) { | 389 const GetResourceEntryCallback& callback) { |
| 390 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 390 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 391 DCHECK(!callback.is_null()); | 391 DCHECK(!callback.is_null()); |
| 392 | 392 |
| 393 runner_->StartOperationWithRetry( | 393 sender_->StartRequestWithRetry( |
| 394 new CopyHostedDocumentOperation( | 394 new CopyHostedDocumentOperation( |
| 395 runner_.get(), | 395 sender_.get(), |
| 396 url_request_context_getter_, | 396 url_request_context_getter_, |
| 397 url_generator_, | 397 url_generator_, |
| 398 base::Bind(&ParseResourceEntryAndRun, callback), | 398 base::Bind(&ParseResourceEntryAndRun, callback), |
| 399 resource_id, | 399 resource_id, |
| 400 new_name)); | 400 new_name)); |
| 401 } | 401 } |
| 402 | 402 |
| 403 void GDataWapiService::RenameResource( | 403 void GDataWapiService::RenameResource( |
| 404 const std::string& resource_id, | 404 const std::string& resource_id, |
| 405 const std::string& new_name, | 405 const std::string& new_name, |
| 406 const EntryActionCallback& callback) { | 406 const EntryActionCallback& callback) { |
| 407 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 407 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 408 DCHECK(!callback.is_null()); | 408 DCHECK(!callback.is_null()); |
| 409 | 409 |
| 410 runner_->StartOperationWithRetry( | 410 sender_->StartRequestWithRetry( |
| 411 new RenameResourceOperation(runner_.get(), | 411 new RenameResourceOperation(sender_.get(), |
| 412 url_request_context_getter_, | 412 url_request_context_getter_, |
| 413 url_generator_, | 413 url_generator_, |
| 414 callback, | 414 callback, |
| 415 resource_id, | 415 resource_id, |
| 416 new_name)); | 416 new_name)); |
| 417 } | 417 } |
| 418 | 418 |
| 419 void GDataWapiService::TouchResource( | 419 void GDataWapiService::TouchResource( |
| 420 const std::string& resource_id, | 420 const std::string& resource_id, |
| 421 const base::Time& modified_date, | 421 const base::Time& modified_date, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 434 base::Passed(scoped_ptr<ResourceEntry>()))); | 434 base::Passed(scoped_ptr<ResourceEntry>()))); |
| 435 } | 435 } |
| 436 | 436 |
| 437 void GDataWapiService::AddResourceToDirectory( | 437 void GDataWapiService::AddResourceToDirectory( |
| 438 const std::string& parent_resource_id, | 438 const std::string& parent_resource_id, |
| 439 const std::string& resource_id, | 439 const std::string& resource_id, |
| 440 const EntryActionCallback& callback) { | 440 const EntryActionCallback& callback) { |
| 441 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 441 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 442 DCHECK(!callback.is_null()); | 442 DCHECK(!callback.is_null()); |
| 443 | 443 |
| 444 runner_->StartOperationWithRetry( | 444 sender_->StartRequestWithRetry( |
| 445 new AddResourceToDirectoryOperation(runner_.get(), | 445 new AddResourceToDirectoryOperation(sender_.get(), |
| 446 url_request_context_getter_, | 446 url_request_context_getter_, |
| 447 url_generator_, | 447 url_generator_, |
| 448 callback, | 448 callback, |
| 449 parent_resource_id, | 449 parent_resource_id, |
| 450 resource_id)); | 450 resource_id)); |
| 451 } | 451 } |
| 452 | 452 |
| 453 void GDataWapiService::RemoveResourceFromDirectory( | 453 void GDataWapiService::RemoveResourceFromDirectory( |
| 454 const std::string& parent_resource_id, | 454 const std::string& parent_resource_id, |
| 455 const std::string& resource_id, | 455 const std::string& resource_id, |
| 456 const EntryActionCallback& callback) { | 456 const EntryActionCallback& callback) { |
| 457 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 457 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 458 DCHECK(!callback.is_null()); | 458 DCHECK(!callback.is_null()); |
| 459 | 459 |
| 460 runner_->StartOperationWithRetry( | 460 sender_->StartRequestWithRetry( |
| 461 new RemoveResourceFromDirectoryOperation(runner_.get(), | 461 new RemoveResourceFromDirectoryOperation(sender_.get(), |
| 462 url_request_context_getter_, | 462 url_request_context_getter_, |
| 463 url_generator_, | 463 url_generator_, |
| 464 callback, | 464 callback, |
| 465 parent_resource_id, | 465 parent_resource_id, |
| 466 resource_id)); | 466 resource_id)); |
| 467 } | 467 } |
| 468 | 468 |
| 469 void GDataWapiService::InitiateUploadNewFile( | 469 void GDataWapiService::InitiateUploadNewFile( |
| 470 const base::FilePath& drive_file_path, | 470 const base::FilePath& drive_file_path, |
| 471 const std::string& content_type, | 471 const std::string& content_type, |
| 472 int64 content_length, | 472 int64 content_length, |
| 473 const std::string& parent_resource_id, | 473 const std::string& parent_resource_id, |
| 474 const std::string& title, | 474 const std::string& title, |
| 475 const InitiateUploadCallback& callback) { | 475 const InitiateUploadCallback& callback) { |
| 476 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 476 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 477 DCHECK(!callback.is_null()); | 477 DCHECK(!callback.is_null()); |
| 478 DCHECK(!parent_resource_id.empty()); | 478 DCHECK(!parent_resource_id.empty()); |
| 479 | 479 |
| 480 runner_->StartOperationWithRetry( | 480 sender_->StartRequestWithRetry( |
| 481 new InitiateUploadNewFileOperation(runner_.get(), | 481 new InitiateUploadNewFileOperation(sender_.get(), |
| 482 url_request_context_getter_, | 482 url_request_context_getter_, |
| 483 url_generator_, | 483 url_generator_, |
| 484 callback, | 484 callback, |
| 485 drive_file_path, | 485 drive_file_path, |
| 486 content_type, | 486 content_type, |
| 487 content_length, | 487 content_length, |
| 488 parent_resource_id, | 488 parent_resource_id, |
| 489 title)); | 489 title)); |
| 490 } | 490 } |
| 491 | 491 |
| 492 void GDataWapiService::InitiateUploadExistingFile( | 492 void GDataWapiService::InitiateUploadExistingFile( |
| 493 const base::FilePath& drive_file_path, | 493 const base::FilePath& drive_file_path, |
| 494 const std::string& content_type, | 494 const std::string& content_type, |
| 495 int64 content_length, | 495 int64 content_length, |
| 496 const std::string& resource_id, | 496 const std::string& resource_id, |
| 497 const std::string& etag, | 497 const std::string& etag, |
| 498 const InitiateUploadCallback& callback) { | 498 const InitiateUploadCallback& callback) { |
| 499 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 499 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 500 DCHECK(!callback.is_null()); | 500 DCHECK(!callback.is_null()); |
| 501 DCHECK(!resource_id.empty()); | 501 DCHECK(!resource_id.empty()); |
| 502 | 502 |
| 503 runner_->StartOperationWithRetry( | 503 sender_->StartRequestWithRetry( |
| 504 new InitiateUploadExistingFileOperation(runner_.get(), | 504 new InitiateUploadExistingFileOperation(sender_.get(), |
| 505 url_request_context_getter_, | 505 url_request_context_getter_, |
| 506 url_generator_, | 506 url_generator_, |
| 507 callback, | 507 callback, |
| 508 drive_file_path, | 508 drive_file_path, |
| 509 content_type, | 509 content_type, |
| 510 content_length, | 510 content_length, |
| 511 resource_id, | 511 resource_id, |
| 512 etag)); | 512 etag)); |
| 513 } | 513 } |
| 514 | 514 |
| 515 void GDataWapiService::ResumeUpload( | 515 void GDataWapiService::ResumeUpload( |
| 516 const base::FilePath& drive_file_path, | 516 const base::FilePath& drive_file_path, |
| 517 const GURL& upload_url, | 517 const GURL& upload_url, |
| 518 int64 start_position, | 518 int64 start_position, |
| 519 int64 end_position, | 519 int64 end_position, |
| 520 int64 content_length, | 520 int64 content_length, |
| 521 const std::string& content_type, | 521 const std::string& content_type, |
| 522 const base::FilePath& local_file_path, | 522 const base::FilePath& local_file_path, |
| 523 const UploadRangeCallback& callback, | 523 const UploadRangeCallback& callback, |
| 524 const ProgressCallback& progress_callback) { | 524 const ProgressCallback& progress_callback) { |
| 525 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 525 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 526 DCHECK(!callback.is_null()); | 526 DCHECK(!callback.is_null()); |
| 527 | 527 |
| 528 runner_->StartOperationWithRetry( | 528 sender_->StartRequestWithRetry( |
| 529 new ResumeUploadOperation(runner_.get(), | 529 new ResumeUploadOperation(sender_.get(), |
| 530 url_request_context_getter_, | 530 url_request_context_getter_, |
| 531 callback, | 531 callback, |
| 532 progress_callback, | 532 progress_callback, |
| 533 drive_file_path, | 533 drive_file_path, |
| 534 upload_url, | 534 upload_url, |
| 535 start_position, | 535 start_position, |
| 536 end_position, | 536 end_position, |
| 537 content_length, | 537 content_length, |
| 538 content_type, | 538 content_type, |
| 539 local_file_path)); | 539 local_file_path)); |
| 540 } | 540 } |
| 541 | 541 |
| 542 void GDataWapiService::GetUploadStatus( | 542 void GDataWapiService::GetUploadStatus( |
| 543 const base::FilePath& drive_file_path, | 543 const base::FilePath& drive_file_path, |
| 544 const GURL& upload_url, | 544 const GURL& upload_url, |
| 545 int64 content_length, | 545 int64 content_length, |
| 546 const UploadRangeCallback& callback) { | 546 const UploadRangeCallback& callback) { |
| 547 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 547 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 548 DCHECK(!callback.is_null()); | 548 DCHECK(!callback.is_null()); |
| 549 | 549 |
| 550 runner_->StartOperationWithRetry( | 550 sender_->StartRequestWithRetry( |
| 551 new GetUploadStatusOperation(runner_.get(), | 551 new GetUploadStatusOperation(sender_.get(), |
| 552 url_request_context_getter_, | 552 url_request_context_getter_, |
| 553 callback, | 553 callback, |
| 554 drive_file_path, | 554 drive_file_path, |
| 555 upload_url, | 555 upload_url, |
| 556 content_length)); | 556 content_length)); |
| 557 } | 557 } |
| 558 | 558 |
| 559 void GDataWapiService::AuthorizeApp(const std::string& resource_id, | 559 void GDataWapiService::AuthorizeApp(const std::string& resource_id, |
| 560 const std::string& app_id, | 560 const std::string& app_id, |
| 561 const AuthorizeAppCallback& callback) { | 561 const AuthorizeAppCallback& callback) { |
| 562 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 562 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 563 DCHECK(!callback.is_null()); | 563 DCHECK(!callback.is_null()); |
| 564 | 564 |
| 565 runner_->StartOperationWithRetry( | 565 sender_->StartRequestWithRetry( |
| 566 new AuthorizeAppOperation( | 566 new AuthorizeAppOperation( |
| 567 runner_.get(), | 567 sender_.get(), |
| 568 url_request_context_getter_, | 568 url_request_context_getter_, |
| 569 url_generator_, | 569 url_generator_, |
| 570 callback, | 570 callback, |
| 571 resource_id, | 571 resource_id, |
| 572 app_id)); | 572 app_id)); |
| 573 } | 573 } |
| 574 | 574 |
| 575 bool GDataWapiService::HasAccessToken() const { | 575 bool GDataWapiService::HasAccessToken() const { |
| 576 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 576 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 577 | 577 |
| 578 return runner_->auth_service()->HasAccessToken(); | 578 return sender_->auth_service()->HasAccessToken(); |
| 579 } | 579 } |
| 580 | 580 |
| 581 bool GDataWapiService::HasRefreshToken() const { | 581 bool GDataWapiService::HasRefreshToken() const { |
| 582 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 582 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 583 | 583 |
| 584 return runner_->auth_service()->HasRefreshToken(); | 584 return sender_->auth_service()->HasRefreshToken(); |
| 585 } | 585 } |
| 586 | 586 |
| 587 void GDataWapiService::ClearAccessToken() { | 587 void GDataWapiService::ClearAccessToken() { |
| 588 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 588 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 589 return runner_->auth_service()->ClearAccessToken(); | 589 return sender_->auth_service()->ClearAccessToken(); |
| 590 } | 590 } |
| 591 | 591 |
| 592 void GDataWapiService::ClearRefreshToken() { | 592 void GDataWapiService::ClearRefreshToken() { |
| 593 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 593 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 594 return runner_->auth_service()->ClearRefreshToken(); | 594 return sender_->auth_service()->ClearRefreshToken(); |
| 595 } | 595 } |
| 596 | 596 |
| 597 void GDataWapiService::OnOAuth2RefreshTokenChanged() { | 597 void GDataWapiService::OnOAuth2RefreshTokenChanged() { |
| 598 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 598 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 599 if (CanStartOperation()) { | 599 if (CanStartOperation()) { |
| 600 FOR_EACH_OBSERVER( | 600 FOR_EACH_OBSERVER( |
| 601 DriveServiceObserver, observers_, OnReadyToPerformOperations()); | 601 DriveServiceObserver, observers_, OnReadyToPerformOperations()); |
| 602 } else if (!HasRefreshToken()) { | 602 } else if (!HasRefreshToken()) { |
| 603 FOR_EACH_OBSERVER( | 603 FOR_EACH_OBSERVER( |
| 604 DriveServiceObserver, observers_, OnRefreshTokenInvalid()); | 604 DriveServiceObserver, observers_, OnRefreshTokenInvalid()); |
| 605 } | 605 } |
| 606 } | 606 } |
| 607 | 607 |
| 608 } // namespace google_apis | 608 } // namespace google_apis |
| OLD | NEW |