| 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 "google_apis/drive/drive_api_requests.h" | 5 #include "google_apis/drive/drive_api_requests.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback.h" | 8 #include "base/callback.h" |
| 9 #include "base/json/json_writer.h" | 9 #include "base/json/json_writer.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| 11 #include "base/sequenced_task_runner.h" | 11 #include "base/sequenced_task_runner.h" |
| 12 #include "base/task_runner_util.h" | 12 #include "base/task_runner_util.h" |
| 13 #include "base/values.h" | 13 #include "base/values.h" |
| 14 #include "google_apis/drive/drive_api_parser.h" | |
| 15 #include "google_apis/drive/request_sender.h" | 14 #include "google_apis/drive/request_sender.h" |
| 16 #include "google_apis/drive/request_util.h" | 15 #include "google_apis/drive/request_util.h" |
| 17 #include "google_apis/drive/time_util.h" | 16 #include "google_apis/drive/time_util.h" |
| 18 #include "net/base/url_util.h" | 17 #include "net/base/url_util.h" |
| 19 | 18 |
| 20 namespace google_apis { | 19 namespace google_apis { |
| 21 namespace { | 20 namespace { |
| 22 | 21 |
| 23 const char kContentTypeApplicationJson[] = "application/json"; | 22 const char kContentTypeApplicationJson[] = "application/json"; |
| 24 const char kParentLinkKind[] = "drive#fileLink"; | 23 const char kParentLinkKind[] = "drive#fileLink"; |
| 25 | 24 |
| 26 // Parses the JSON value to a resource typed |T| and runs |callback| on the UI | |
| 27 // thread once parsing is done. | |
| 28 template<typename T> | |
| 29 void ParseJsonAndRun( | |
| 30 const base::Callback<void(GDataErrorCode, scoped_ptr<T>)>& callback, | |
| 31 GDataErrorCode error, | |
| 32 scoped_ptr<base::Value> value) { | |
| 33 DCHECK(!callback.is_null()); | |
| 34 | |
| 35 scoped_ptr<T> resource; | |
| 36 if (value) { | |
| 37 resource = T::CreateFrom(*value); | |
| 38 if (!resource) { | |
| 39 // Failed to parse the JSON value, although the JSON value is available, | |
| 40 // so let the callback know the parsing error. | |
| 41 error = GDATA_PARSE_ERROR; | |
| 42 } | |
| 43 } | |
| 44 | |
| 45 callback.Run(error, resource.Pass()); | |
| 46 } | |
| 47 | |
| 48 // Thin adapter of T::CreateFrom. | |
| 49 template<typename T> | |
| 50 scoped_ptr<T> ParseJsonOnBlockingPool(scoped_ptr<base::Value> value) { | |
| 51 return T::CreateFrom(*value); | |
| 52 } | |
| 53 | |
| 54 // Runs |callback| with given |error| and |value|. If |value| is null, | |
| 55 // overwrites |error| to GDATA_PARSE_ERROR. | |
| 56 template<typename T> | |
| 57 void ParseJsonOnBlockingPoolAndRunAfterBlockingPoolTask( | |
| 58 const base::Callback<void(GDataErrorCode, scoped_ptr<T>)>& callback, | |
| 59 GDataErrorCode error, scoped_ptr<T> value) { | |
| 60 if (!value) | |
| 61 error = GDATA_PARSE_ERROR; | |
| 62 callback.Run(error, value.Pass()); | |
| 63 } | |
| 64 | |
| 65 // Parses the JSON value to a resource typed |T| and runs |callback| on | |
| 66 // blocking pool, and then run on the current thread. | |
| 67 // TODO(hidehiko): Move this and ParseJsonAndRun defined above into base with | |
| 68 // merging the tasks running on blocking pool into one. | |
| 69 template<typename T> | |
| 70 void ParseJsonOnBlockingPoolAndRun( | |
| 71 scoped_refptr<base::TaskRunner> blocking_task_runner, | |
| 72 const base::Callback<void(GDataErrorCode, scoped_ptr<T>)>& callback, | |
| 73 GDataErrorCode error, | |
| 74 scoped_ptr<base::Value> value) { | |
| 75 DCHECK(!callback.is_null()); | |
| 76 | |
| 77 if (!value) { | |
| 78 callback.Run(error, scoped_ptr<T>()); | |
| 79 return; | |
| 80 } | |
| 81 | |
| 82 base::PostTaskAndReplyWithResult( | |
| 83 blocking_task_runner, | |
| 84 FROM_HERE, | |
| 85 base::Bind(&ParseJsonOnBlockingPool<T>, base::Passed(&value)), | |
| 86 base::Bind(&ParseJsonOnBlockingPoolAndRunAfterBlockingPoolTask<T>, | |
| 87 callback, error)); | |
| 88 } | |
| 89 | |
| 90 // Parses the JSON value to FileResource instance and runs |callback| on the | 25 // Parses the JSON value to FileResource instance and runs |callback| on the |
| 91 // UI thread once parsing is done. | 26 // UI thread once parsing is done. |
| 92 // This is customized version of ParseJsonAndRun defined above to adapt the | 27 // This is customized version of ParseJsonAndRun defined above to adapt the |
| 93 // remaining response type. | 28 // remaining response type. |
| 94 void ParseFileResourceWithUploadRangeAndRun( | 29 void ParseFileResourceWithUploadRangeAndRun( |
| 95 const drive::UploadRangeCallback& callback, | 30 const drive::UploadRangeCallback& callback, |
| 96 const UploadRangeResponse& response, | 31 const UploadRangeResponse& response, |
| 97 scoped_ptr<base::Value> value) { | 32 scoped_ptr<base::Value> value) { |
| 98 DCHECK(!callback.is_null()); | 33 DCHECK(!callback.is_null()); |
| 99 | 34 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 119 scoped_ptr<base::DictionaryValue> parent(new base::DictionaryValue); | 54 scoped_ptr<base::DictionaryValue> parent(new base::DictionaryValue); |
| 120 parent->SetString("kind", kParentLinkKind); | 55 parent->SetString("kind", kParentLinkKind); |
| 121 parent->SetString("id", file_id); | 56 parent->SetString("id", file_id); |
| 122 return parent.Pass(); | 57 return parent.Pass(); |
| 123 } | 58 } |
| 124 | 59 |
| 125 } // namespace | 60 } // namespace |
| 126 | 61 |
| 127 namespace drive { | 62 namespace drive { |
| 128 | 63 |
| 129 //============================ DriveApiDataRequest =========================== | 64 //============================ DriveApiPartialFieldRequest ==================== |
| 130 | 65 |
| 131 DriveApiDataRequest::DriveApiDataRequest(RequestSender* sender, | 66 DriveApiPartialFieldRequest::DriveApiPartialFieldRequest( |
| 132 const GetDataCallback& callback) | 67 RequestSender* sender) : UrlFetchRequestBase(sender) { |
| 133 : GetDataRequest(sender, callback) { | |
| 134 } | 68 } |
| 135 | 69 |
| 136 DriveApiDataRequest::~DriveApiDataRequest() { | 70 DriveApiPartialFieldRequest::~DriveApiPartialFieldRequest() { |
| 137 } | 71 } |
| 138 | 72 |
| 139 GURL DriveApiDataRequest::GetURL() const { | 73 GURL DriveApiPartialFieldRequest::GetURL() const { |
| 140 GURL url = GetURLInternal(); | 74 GURL url = GetURLInternal(); |
| 141 if (!fields_.empty()) | 75 if (!fields_.empty()) |
| 142 url = net::AppendOrReplaceQueryParameter(url, "fields", fields_); | 76 url = net::AppendOrReplaceQueryParameter(url, "fields", fields_); |
| 143 return url; | 77 return url; |
| 144 } | 78 } |
| 145 | 79 |
| 146 //=============================== FilesGetRequest ============================= | 80 //=============================== FilesGetRequest ============================= |
| 147 | 81 |
| 148 FilesGetRequest::FilesGetRequest( | 82 FilesGetRequest::FilesGetRequest( |
| 149 RequestSender* sender, | 83 RequestSender* sender, |
| 150 const DriveApiUrlGenerator& url_generator, | 84 const DriveApiUrlGenerator& url_generator, |
| 151 const FileResourceCallback& callback) | 85 const FileResourceCallback& callback) |
| 152 : DriveApiDataRequest( | 86 : DriveApiDataRequest<FileResource>(sender, callback), |
| 153 sender, | |
| 154 base::Bind(&ParseJsonAndRun<FileResource>, callback)), | |
| 155 url_generator_(url_generator) { | 87 url_generator_(url_generator) { |
| 156 DCHECK(!callback.is_null()); | 88 DCHECK(!callback.is_null()); |
| 157 } | 89 } |
| 158 | 90 |
| 159 FilesGetRequest::~FilesGetRequest() {} | 91 FilesGetRequest::~FilesGetRequest() {} |
| 160 | 92 |
| 161 GURL FilesGetRequest::GetURLInternal() const { | 93 GURL FilesGetRequest::GetURLInternal() const { |
| 162 return url_generator_.GetFilesGetUrl(file_id_); | 94 return url_generator_.GetFilesGetUrl(file_id_); |
| 163 } | 95 } |
| 164 | 96 |
| 165 //============================ FilesAuthorizeRequest =========================== | 97 //============================ FilesAuthorizeRequest =========================== |
| 166 | 98 |
| 167 FilesAuthorizeRequest::FilesAuthorizeRequest( | 99 FilesAuthorizeRequest::FilesAuthorizeRequest( |
| 168 RequestSender* sender, | 100 RequestSender* sender, |
| 169 const DriveApiUrlGenerator& url_generator, | 101 const DriveApiUrlGenerator& url_generator, |
| 170 const FileResourceCallback& callback) | 102 const FileResourceCallback& callback) |
| 171 : DriveApiDataRequest( | 103 : DriveApiDataRequest<FileResource>(sender, callback), |
| 172 sender, | |
| 173 base::Bind(&ParseJsonAndRun<FileResource>, callback)), | |
| 174 url_generator_(url_generator) { | 104 url_generator_(url_generator) { |
| 175 DCHECK(!callback.is_null()); | 105 DCHECK(!callback.is_null()); |
| 176 } | 106 } |
| 177 | 107 |
| 178 FilesAuthorizeRequest::~FilesAuthorizeRequest() {} | 108 FilesAuthorizeRequest::~FilesAuthorizeRequest() {} |
| 179 | 109 |
| 180 net::URLFetcher::RequestType FilesAuthorizeRequest::GetRequestType() const { | 110 net::URLFetcher::RequestType FilesAuthorizeRequest::GetRequestType() const { |
| 181 return net::URLFetcher::POST; | 111 return net::URLFetcher::POST; |
| 182 } | 112 } |
| 183 | 113 |
| 184 GURL FilesAuthorizeRequest::GetURLInternal() const { | 114 GURL FilesAuthorizeRequest::GetURLInternal() const { |
| 185 return url_generator_.GetFilesAuthorizeUrl(file_id_, app_id_); | 115 return url_generator_.GetFilesAuthorizeUrl(file_id_, app_id_); |
| 186 } | 116 } |
| 187 | 117 |
| 188 //============================ FilesInsertRequest ============================ | 118 //============================ FilesInsertRequest ============================ |
| 189 | 119 |
| 190 FilesInsertRequest::FilesInsertRequest( | 120 FilesInsertRequest::FilesInsertRequest( |
| 191 RequestSender* sender, | 121 RequestSender* sender, |
| 192 const DriveApiUrlGenerator& url_generator, | 122 const DriveApiUrlGenerator& url_generator, |
| 193 const FileResourceCallback& callback) | 123 const FileResourceCallback& callback) |
| 194 : DriveApiDataRequest( | 124 : DriveApiDataRequest<FileResource>(sender, callback), |
| 195 sender, | |
| 196 base::Bind(&ParseJsonAndRun<FileResource>, callback)), | |
| 197 url_generator_(url_generator) { | 125 url_generator_(url_generator) { |
| 198 DCHECK(!callback.is_null()); | 126 DCHECK(!callback.is_null()); |
| 199 } | 127 } |
| 200 | 128 |
| 201 FilesInsertRequest::~FilesInsertRequest() {} | 129 FilesInsertRequest::~FilesInsertRequest() {} |
| 202 | 130 |
| 203 net::URLFetcher::RequestType FilesInsertRequest::GetRequestType() const { | 131 net::URLFetcher::RequestType FilesInsertRequest::GetRequestType() const { |
| 204 return net::URLFetcher::POST; | 132 return net::URLFetcher::POST; |
| 205 } | 133 } |
| 206 | 134 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 GURL FilesInsertRequest::GetURLInternal() const { | 171 GURL FilesInsertRequest::GetURLInternal() const { |
| 244 return url_generator_.GetFilesInsertUrl(); | 172 return url_generator_.GetFilesInsertUrl(); |
| 245 } | 173 } |
| 246 | 174 |
| 247 //============================== FilesPatchRequest ============================ | 175 //============================== FilesPatchRequest ============================ |
| 248 | 176 |
| 249 FilesPatchRequest::FilesPatchRequest( | 177 FilesPatchRequest::FilesPatchRequest( |
| 250 RequestSender* sender, | 178 RequestSender* sender, |
| 251 const DriveApiUrlGenerator& url_generator, | 179 const DriveApiUrlGenerator& url_generator, |
| 252 const FileResourceCallback& callback) | 180 const FileResourceCallback& callback) |
| 253 : DriveApiDataRequest( | 181 : DriveApiDataRequest<FileResource>(sender, callback), |
| 254 sender, | |
| 255 base::Bind(&ParseJsonAndRun<FileResource>, callback)), | |
| 256 url_generator_(url_generator), | 182 url_generator_(url_generator), |
| 257 set_modified_date_(false), | 183 set_modified_date_(false), |
| 258 update_viewed_date_(true) { | 184 update_viewed_date_(true) { |
| 259 DCHECK(!callback.is_null()); | 185 DCHECK(!callback.is_null()); |
| 260 } | 186 } |
| 261 | 187 |
| 262 FilesPatchRequest::~FilesPatchRequest() {} | 188 FilesPatchRequest::~FilesPatchRequest() {} |
| 263 | 189 |
| 264 net::URLFetcher::RequestType FilesPatchRequest::GetRequestType() const { | 190 net::URLFetcher::RequestType FilesPatchRequest::GetRequestType() const { |
| 265 return net::URLFetcher::PATCH; | 191 return net::URLFetcher::PATCH; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 << *upload_content << "]"; | 239 << *upload_content << "]"; |
| 314 return true; | 240 return true; |
| 315 } | 241 } |
| 316 | 242 |
| 317 //============================= FilesCopyRequest ============================== | 243 //============================= FilesCopyRequest ============================== |
| 318 | 244 |
| 319 FilesCopyRequest::FilesCopyRequest( | 245 FilesCopyRequest::FilesCopyRequest( |
| 320 RequestSender* sender, | 246 RequestSender* sender, |
| 321 const DriveApiUrlGenerator& url_generator, | 247 const DriveApiUrlGenerator& url_generator, |
| 322 const FileResourceCallback& callback) | 248 const FileResourceCallback& callback) |
| 323 : DriveApiDataRequest( | 249 : DriveApiDataRequest<FileResource>(sender, callback), |
| 324 sender, | |
| 325 base::Bind(&ParseJsonAndRun<FileResource>, callback)), | |
| 326 url_generator_(url_generator) { | 250 url_generator_(url_generator) { |
| 327 DCHECK(!callback.is_null()); | 251 DCHECK(!callback.is_null()); |
| 328 } | 252 } |
| 329 | 253 |
| 330 FilesCopyRequest::~FilesCopyRequest() { | 254 FilesCopyRequest::~FilesCopyRequest() { |
| 331 } | 255 } |
| 332 | 256 |
| 333 net::URLFetcher::RequestType FilesCopyRequest::GetRequestType() const { | 257 net::URLFetcher::RequestType FilesCopyRequest::GetRequestType() const { |
| 334 return net::URLFetcher::POST; | 258 return net::URLFetcher::POST; |
| 335 } | 259 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 368 << *upload_content << "]"; | 292 << *upload_content << "]"; |
| 369 return true; | 293 return true; |
| 370 } | 294 } |
| 371 | 295 |
| 372 //============================= FilesListRequest ============================= | 296 //============================= FilesListRequest ============================= |
| 373 | 297 |
| 374 FilesListRequest::FilesListRequest( | 298 FilesListRequest::FilesListRequest( |
| 375 RequestSender* sender, | 299 RequestSender* sender, |
| 376 const DriveApiUrlGenerator& url_generator, | 300 const DriveApiUrlGenerator& url_generator, |
| 377 const FileListCallback& callback) | 301 const FileListCallback& callback) |
| 378 : DriveApiDataRequest( | 302 : DriveApiDataRequest<FileList>(sender, callback), |
| 379 sender, | |
| 380 base::Bind(&ParseJsonOnBlockingPoolAndRun<FileList>, | |
| 381 make_scoped_refptr(sender->blocking_task_runner()), | |
| 382 callback)), | |
| 383 url_generator_(url_generator), | 303 url_generator_(url_generator), |
| 384 max_results_(100) { | 304 max_results_(100) { |
| 385 DCHECK(!callback.is_null()); | 305 DCHECK(!callback.is_null()); |
| 386 } | 306 } |
| 387 | 307 |
| 388 FilesListRequest::~FilesListRequest() {} | 308 FilesListRequest::~FilesListRequest() {} |
| 389 | 309 |
| 390 GURL FilesListRequest::GetURLInternal() const { | 310 GURL FilesListRequest::GetURLInternal() const { |
| 391 return url_generator_.GetFilesListUrl(max_results_, page_token_, q_); | 311 return url_generator_.GetFilesListUrl(max_results_, page_token_, q_); |
| 392 } | 312 } |
| 393 | 313 |
| 394 //======================== FilesListNextPageRequest ========================= | 314 //======================== FilesListNextPageRequest ========================= |
| 395 | 315 |
| 396 FilesListNextPageRequest::FilesListNextPageRequest( | 316 FilesListNextPageRequest::FilesListNextPageRequest( |
| 397 RequestSender* sender, | 317 RequestSender* sender, |
| 398 const FileListCallback& callback) | 318 const FileListCallback& callback) |
| 399 : DriveApiDataRequest( | 319 : DriveApiDataRequest<FileList>(sender, callback) { |
| 400 sender, | |
| 401 base::Bind(&ParseJsonOnBlockingPoolAndRun<FileList>, | |
| 402 make_scoped_refptr(sender->blocking_task_runner()), | |
| 403 callback)) { | |
| 404 DCHECK(!callback.is_null()); | 320 DCHECK(!callback.is_null()); |
| 405 } | 321 } |
| 406 | 322 |
| 407 FilesListNextPageRequest::~FilesListNextPageRequest() { | 323 FilesListNextPageRequest::~FilesListNextPageRequest() { |
| 408 } | 324 } |
| 409 | 325 |
| 410 GURL FilesListNextPageRequest::GetURLInternal() const { | 326 GURL FilesListNextPageRequest::GetURLInternal() const { |
| 411 return next_link_; | 327 return next_link_; |
| 412 } | 328 } |
| 413 | 329 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 438 headers.push_back(util::GenerateIfMatchHeader(etag_)); | 354 headers.push_back(util::GenerateIfMatchHeader(etag_)); |
| 439 return headers; | 355 return headers; |
| 440 } | 356 } |
| 441 | 357 |
| 442 //============================ FilesTrashRequest ============================= | 358 //============================ FilesTrashRequest ============================= |
| 443 | 359 |
| 444 FilesTrashRequest::FilesTrashRequest( | 360 FilesTrashRequest::FilesTrashRequest( |
| 445 RequestSender* sender, | 361 RequestSender* sender, |
| 446 const DriveApiUrlGenerator& url_generator, | 362 const DriveApiUrlGenerator& url_generator, |
| 447 const FileResourceCallback& callback) | 363 const FileResourceCallback& callback) |
| 448 : DriveApiDataRequest( | 364 : DriveApiDataRequest<FileResource>(sender, callback), |
| 449 sender, | |
| 450 base::Bind(&ParseJsonAndRun<FileResource>, callback)), | |
| 451 url_generator_(url_generator) { | 365 url_generator_(url_generator) { |
| 452 DCHECK(!callback.is_null()); | 366 DCHECK(!callback.is_null()); |
| 453 } | 367 } |
| 454 | 368 |
| 455 FilesTrashRequest::~FilesTrashRequest() {} | 369 FilesTrashRequest::~FilesTrashRequest() {} |
| 456 | 370 |
| 457 net::URLFetcher::RequestType FilesTrashRequest::GetRequestType() const { | 371 net::URLFetcher::RequestType FilesTrashRequest::GetRequestType() const { |
| 458 return net::URLFetcher::POST; | 372 return net::URLFetcher::POST; |
| 459 } | 373 } |
| 460 | 374 |
| 461 GURL FilesTrashRequest::GetURLInternal() const { | 375 GURL FilesTrashRequest::GetURLInternal() const { |
| 462 return url_generator_.GetFilesTrashUrl(file_id_); | 376 return url_generator_.GetFilesTrashUrl(file_id_); |
| 463 } | 377 } |
| 464 | 378 |
| 465 //============================== AboutGetRequest ============================= | 379 //============================== AboutGetRequest ============================= |
| 466 | 380 |
| 467 AboutGetRequest::AboutGetRequest( | 381 AboutGetRequest::AboutGetRequest( |
| 468 RequestSender* sender, | 382 RequestSender* sender, |
| 469 const DriveApiUrlGenerator& url_generator, | 383 const DriveApiUrlGenerator& url_generator, |
| 470 const AboutResourceCallback& callback) | 384 const AboutResourceCallback& callback) |
| 471 : DriveApiDataRequest( | 385 : DriveApiDataRequest<AboutResource>(sender, callback), |
| 472 sender, | |
| 473 base::Bind(&ParseJsonAndRun<AboutResource>, callback)), | |
| 474 url_generator_(url_generator) { | 386 url_generator_(url_generator) { |
| 475 DCHECK(!callback.is_null()); | 387 DCHECK(!callback.is_null()); |
| 476 } | 388 } |
| 477 | 389 |
| 478 AboutGetRequest::~AboutGetRequest() {} | 390 AboutGetRequest::~AboutGetRequest() {} |
| 479 | 391 |
| 480 GURL AboutGetRequest::GetURLInternal() const { | 392 GURL AboutGetRequest::GetURLInternal() const { |
| 481 return url_generator_.GetAboutGetUrl(); | 393 return url_generator_.GetAboutGetUrl(); |
| 482 } | 394 } |
| 483 | 395 |
| 484 //============================ ChangesListRequest =========================== | 396 //============================ ChangesListRequest =========================== |
| 485 | 397 |
| 486 ChangesListRequest::ChangesListRequest( | 398 ChangesListRequest::ChangesListRequest( |
| 487 RequestSender* sender, | 399 RequestSender* sender, |
| 488 const DriveApiUrlGenerator& url_generator, | 400 const DriveApiUrlGenerator& url_generator, |
| 489 const ChangeListCallback& callback) | 401 const ChangeListCallback& callback) |
| 490 : DriveApiDataRequest( | 402 : DriveApiDataRequest<ChangeList>(sender, callback), |
| 491 sender, | |
| 492 base::Bind(&ParseJsonOnBlockingPoolAndRun<ChangeList>, | |
| 493 make_scoped_refptr(sender->blocking_task_runner()), | |
| 494 callback)), | |
| 495 url_generator_(url_generator), | 403 url_generator_(url_generator), |
| 496 include_deleted_(true), | 404 include_deleted_(true), |
| 497 max_results_(100), | 405 max_results_(100), |
| 498 start_change_id_(0) { | 406 start_change_id_(0) { |
| 499 DCHECK(!callback.is_null()); | 407 DCHECK(!callback.is_null()); |
| 500 } | 408 } |
| 501 | 409 |
| 502 ChangesListRequest::~ChangesListRequest() {} | 410 ChangesListRequest::~ChangesListRequest() {} |
| 503 | 411 |
| 504 GURL ChangesListRequest::GetURLInternal() const { | 412 GURL ChangesListRequest::GetURLInternal() const { |
| 505 return url_generator_.GetChangesListUrl( | 413 return url_generator_.GetChangesListUrl( |
| 506 include_deleted_, max_results_, page_token_, start_change_id_); | 414 include_deleted_, max_results_, page_token_, start_change_id_); |
| 507 } | 415 } |
| 508 | 416 |
| 509 //======================== ChangesListNextPageRequest ========================= | 417 //======================== ChangesListNextPageRequest ========================= |
| 510 | 418 |
| 511 ChangesListNextPageRequest::ChangesListNextPageRequest( | 419 ChangesListNextPageRequest::ChangesListNextPageRequest( |
| 512 RequestSender* sender, | 420 RequestSender* sender, |
| 513 const ChangeListCallback& callback) | 421 const ChangeListCallback& callback) |
| 514 : DriveApiDataRequest( | 422 : DriveApiDataRequest<ChangeList>(sender, callback) { |
| 515 sender, | |
| 516 base::Bind(&ParseJsonOnBlockingPoolAndRun<ChangeList>, | |
| 517 make_scoped_refptr(sender->blocking_task_runner()), | |
| 518 callback)) { | |
| 519 DCHECK(!callback.is_null()); | 423 DCHECK(!callback.is_null()); |
| 520 } | 424 } |
| 521 | 425 |
| 522 ChangesListNextPageRequest::~ChangesListNextPageRequest() { | 426 ChangesListNextPageRequest::~ChangesListNextPageRequest() { |
| 523 } | 427 } |
| 524 | 428 |
| 525 GURL ChangesListNextPageRequest::GetURLInternal() const { | 429 GURL ChangesListNextPageRequest::GetURLInternal() const { |
| 526 return next_link_; | 430 return next_link_; |
| 527 } | 431 } |
| 528 | 432 |
| 529 //============================== AppsListRequest =========================== | 433 //============================== AppsListRequest =========================== |
| 530 | 434 |
| 531 AppsListRequest::AppsListRequest( | 435 AppsListRequest::AppsListRequest( |
| 532 RequestSender* sender, | 436 RequestSender* sender, |
| 533 const DriveApiUrlGenerator& url_generator, | 437 const DriveApiUrlGenerator& url_generator, |
| 534 bool use_internal_endpoint, | 438 bool use_internal_endpoint, |
| 535 const AppListCallback& callback) | 439 const AppListCallback& callback) |
| 536 : DriveApiDataRequest( | 440 : DriveApiDataRequest<AppList>(sender, callback), |
| 537 sender, | |
| 538 base::Bind(&ParseJsonAndRun<AppList>, callback)), | |
| 539 url_generator_(url_generator), | 441 url_generator_(url_generator), |
| 540 use_internal_endpoint_(use_internal_endpoint) { | 442 use_internal_endpoint_(use_internal_endpoint) { |
| 541 DCHECK(!callback.is_null()); | 443 DCHECK(!callback.is_null()); |
| 542 } | 444 } |
| 543 | 445 |
| 544 AppsListRequest::~AppsListRequest() {} | 446 AppsListRequest::~AppsListRequest() {} |
| 545 | 447 |
| 546 GURL AppsListRequest::GetURLInternal() const { | 448 GURL AppsListRequest::GetURLInternal() const { |
| 547 return url_generator_.GetAppsListUrl(use_internal_endpoint_); | 449 return url_generator_.GetAppsListUrl(use_internal_endpoint_); |
| 548 } | 450 } |
| (...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 896 } | 798 } |
| 897 break; | 799 break; |
| 898 } | 800 } |
| 899 root.SetString("value", value_); | 801 root.SetString("value", value_); |
| 900 base::JSONWriter::Write(&root, upload_content); | 802 base::JSONWriter::Write(&root, upload_content); |
| 901 return true; | 803 return true; |
| 902 } | 804 } |
| 903 | 805 |
| 904 } // namespace drive | 806 } // namespace drive |
| 905 } // namespace google_apis | 807 } // namespace google_apis |
| OLD | NEW |