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

Unified Diff: google_apis/drive/drive_api_requests.cc

Issue 442193002: Parse Drive API responses all at once in the blocking pool. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix the cause of the regression. 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 | « google_apis/drive/drive_api_requests.h ('k') | google_apis/drive/gdata_wapi_requests.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: google_apis/drive/drive_api_requests.cc
diff --git a/google_apis/drive/drive_api_requests.cc b/google_apis/drive/drive_api_requests.cc
index a63757112b86ca9f1fa85525fd098d973edbbf36..d711d07c2ac4a0fce10a6cb5bbbecc07d3c7ca40 100644
--- a/google_apis/drive/drive_api_requests.cc
+++ b/google_apis/drive/drive_api_requests.cc
@@ -11,7 +11,6 @@
#include "base/sequenced_task_runner.h"
#include "base/task_runner_util.h"
#include "base/values.h"
-#include "google_apis/drive/drive_api_parser.h"
#include "google_apis/drive/request_sender.h"
#include "google_apis/drive/request_util.h"
#include "google_apis/drive/time_util.h"
@@ -23,70 +22,6 @@ namespace {
const char kContentTypeApplicationJson[] = "application/json";
const char kParentLinkKind[] = "drive#fileLink";
-// Parses the JSON value to a resource typed |T| and runs |callback| on the UI
-// thread once parsing is done.
-template<typename T>
-void ParseJsonAndRun(
- const base::Callback<void(GDataErrorCode, scoped_ptr<T>)>& callback,
- GDataErrorCode error,
- scoped_ptr<base::Value> value) {
- DCHECK(!callback.is_null());
-
- scoped_ptr<T> resource;
- if (value) {
- resource = T::CreateFrom(*value);
- if (!resource) {
- // Failed to parse the JSON value, although the JSON value is available,
- // so let the callback know the parsing error.
- error = GDATA_PARSE_ERROR;
- }
- }
-
- callback.Run(error, resource.Pass());
-}
-
-// Thin adapter of T::CreateFrom.
-template<typename T>
-scoped_ptr<T> ParseJsonOnBlockingPool(scoped_ptr<base::Value> value) {
- return T::CreateFrom(*value);
-}
-
-// Runs |callback| with given |error| and |value|. If |value| is null,
-// overwrites |error| to GDATA_PARSE_ERROR.
-template<typename T>
-void ParseJsonOnBlockingPoolAndRunAfterBlockingPoolTask(
- const base::Callback<void(GDataErrorCode, scoped_ptr<T>)>& callback,
- GDataErrorCode error, scoped_ptr<T> value) {
- if (!value)
- error = GDATA_PARSE_ERROR;
- callback.Run(error, value.Pass());
-}
-
-// Parses the JSON value to a resource typed |T| and runs |callback| on
-// blocking pool, and then run on the current thread.
-// TODO(hidehiko): Move this and ParseJsonAndRun defined above into base with
-// merging the tasks running on blocking pool into one.
-template<typename T>
-void ParseJsonOnBlockingPoolAndRun(
- scoped_refptr<base::TaskRunner> blocking_task_runner,
- const base::Callback<void(GDataErrorCode, scoped_ptr<T>)>& callback,
- GDataErrorCode error,
- scoped_ptr<base::Value> value) {
- DCHECK(!callback.is_null());
-
- if (!value) {
- callback.Run(error, scoped_ptr<T>());
- return;
- }
-
- base::PostTaskAndReplyWithResult(
- blocking_task_runner,
- FROM_HERE,
- base::Bind(&ParseJsonOnBlockingPool<T>, base::Passed(&value)),
- base::Bind(&ParseJsonOnBlockingPoolAndRunAfterBlockingPoolTask<T>,
- callback, error));
-}
-
// Parses the JSON value to FileResource instance and runs |callback| on the
// UI thread once parsing is done.
// This is customized version of ParseJsonAndRun defined above to adapt the
@@ -126,17 +61,16 @@ scoped_ptr<base::DictionaryValue> CreateParentValue(
namespace drive {
-//============================ DriveApiDataRequest ===========================
+//============================ DriveApiPartialFieldRequest ====================
-DriveApiDataRequest::DriveApiDataRequest(RequestSender* sender,
- const GetDataCallback& callback)
- : GetDataRequest(sender, callback) {
+DriveApiPartialFieldRequest::DriveApiPartialFieldRequest(
+ RequestSender* sender) : UrlFetchRequestBase(sender) {
}
-DriveApiDataRequest::~DriveApiDataRequest() {
+DriveApiPartialFieldRequest::~DriveApiPartialFieldRequest() {
}
-GURL DriveApiDataRequest::GetURL() const {
+GURL DriveApiPartialFieldRequest::GetURL() const {
GURL url = GetURLInternal();
if (!fields_.empty())
url = net::AppendOrReplaceQueryParameter(url, "fields", fields_);
@@ -149,9 +83,7 @@ FilesGetRequest::FilesGetRequest(
RequestSender* sender,
const DriveApiUrlGenerator& url_generator,
const FileResourceCallback& callback)
- : DriveApiDataRequest(
- sender,
- base::Bind(&ParseJsonAndRun<FileResource>, callback)),
+ : DriveApiDataRequest<FileResource>(sender, callback),
url_generator_(url_generator) {
DCHECK(!callback.is_null());
}
@@ -168,9 +100,7 @@ FilesAuthorizeRequest::FilesAuthorizeRequest(
RequestSender* sender,
const DriveApiUrlGenerator& url_generator,
const FileResourceCallback& callback)
- : DriveApiDataRequest(
- sender,
- base::Bind(&ParseJsonAndRun<FileResource>, callback)),
+ : DriveApiDataRequest<FileResource>(sender, callback),
url_generator_(url_generator) {
DCHECK(!callback.is_null());
}
@@ -191,9 +121,7 @@ FilesInsertRequest::FilesInsertRequest(
RequestSender* sender,
const DriveApiUrlGenerator& url_generator,
const FileResourceCallback& callback)
- : DriveApiDataRequest(
- sender,
- base::Bind(&ParseJsonAndRun<FileResource>, callback)),
+ : DriveApiDataRequest<FileResource>(sender, callback),
url_generator_(url_generator) {
DCHECK(!callback.is_null());
}
@@ -250,9 +178,7 @@ FilesPatchRequest::FilesPatchRequest(
RequestSender* sender,
const DriveApiUrlGenerator& url_generator,
const FileResourceCallback& callback)
- : DriveApiDataRequest(
- sender,
- base::Bind(&ParseJsonAndRun<FileResource>, callback)),
+ : DriveApiDataRequest<FileResource>(sender, callback),
url_generator_(url_generator),
set_modified_date_(false),
update_viewed_date_(true) {
@@ -320,9 +246,7 @@ FilesCopyRequest::FilesCopyRequest(
RequestSender* sender,
const DriveApiUrlGenerator& url_generator,
const FileResourceCallback& callback)
- : DriveApiDataRequest(
- sender,
- base::Bind(&ParseJsonAndRun<FileResource>, callback)),
+ : DriveApiDataRequest<FileResource>(sender, callback),
url_generator_(url_generator) {
DCHECK(!callback.is_null());
}
@@ -375,11 +299,7 @@ FilesListRequest::FilesListRequest(
RequestSender* sender,
const DriveApiUrlGenerator& url_generator,
const FileListCallback& callback)
- : DriveApiDataRequest(
- sender,
- base::Bind(&ParseJsonOnBlockingPoolAndRun<FileList>,
- make_scoped_refptr(sender->blocking_task_runner()),
- callback)),
+ : DriveApiDataRequest<FileList>(sender, callback),
url_generator_(url_generator),
max_results_(100) {
DCHECK(!callback.is_null());
@@ -396,11 +316,7 @@ GURL FilesListRequest::GetURLInternal() const {
FilesListNextPageRequest::FilesListNextPageRequest(
RequestSender* sender,
const FileListCallback& callback)
- : DriveApiDataRequest(
- sender,
- base::Bind(&ParseJsonOnBlockingPoolAndRun<FileList>,
- make_scoped_refptr(sender->blocking_task_runner()),
- callback)) {
+ : DriveApiDataRequest<FileList>(sender, callback) {
DCHECK(!callback.is_null());
}
@@ -445,9 +361,7 @@ FilesTrashRequest::FilesTrashRequest(
RequestSender* sender,
const DriveApiUrlGenerator& url_generator,
const FileResourceCallback& callback)
- : DriveApiDataRequest(
- sender,
- base::Bind(&ParseJsonAndRun<FileResource>, callback)),
+ : DriveApiDataRequest<FileResource>(sender, callback),
url_generator_(url_generator) {
DCHECK(!callback.is_null());
}
@@ -468,9 +382,7 @@ AboutGetRequest::AboutGetRequest(
RequestSender* sender,
const DriveApiUrlGenerator& url_generator,
const AboutResourceCallback& callback)
- : DriveApiDataRequest(
- sender,
- base::Bind(&ParseJsonAndRun<AboutResource>, callback)),
+ : DriveApiDataRequest<AboutResource>(sender, callback),
url_generator_(url_generator) {
DCHECK(!callback.is_null());
}
@@ -487,11 +399,7 @@ ChangesListRequest::ChangesListRequest(
RequestSender* sender,
const DriveApiUrlGenerator& url_generator,
const ChangeListCallback& callback)
- : DriveApiDataRequest(
- sender,
- base::Bind(&ParseJsonOnBlockingPoolAndRun<ChangeList>,
- make_scoped_refptr(sender->blocking_task_runner()),
- callback)),
+ : DriveApiDataRequest<ChangeList>(sender, callback),
url_generator_(url_generator),
include_deleted_(true),
max_results_(100),
@@ -511,11 +419,7 @@ GURL ChangesListRequest::GetURLInternal() const {
ChangesListNextPageRequest::ChangesListNextPageRequest(
RequestSender* sender,
const ChangeListCallback& callback)
- : DriveApiDataRequest(
- sender,
- base::Bind(&ParseJsonOnBlockingPoolAndRun<ChangeList>,
- make_scoped_refptr(sender->blocking_task_runner()),
- callback)) {
+ : DriveApiDataRequest<ChangeList>(sender, callback) {
DCHECK(!callback.is_null());
}
@@ -533,9 +437,7 @@ AppsListRequest::AppsListRequest(
const DriveApiUrlGenerator& url_generator,
bool use_internal_endpoint,
const AppListCallback& callback)
- : DriveApiDataRequest(
- sender,
- base::Bind(&ParseJsonAndRun<AppList>, callback)),
+ : DriveApiDataRequest<AppList>(sender, callback),
url_generator_(url_generator),
use_internal_endpoint_(use_internal_endpoint) {
DCHECK(!callback.is_null());
« no previous file with comments | « google_apis/drive/drive_api_requests.h ('k') | google_apis/drive/gdata_wapi_requests.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698