| Index: google_apis/drive/gdata_wapi_requests.cc
|
| diff --git a/google_apis/drive/gdata_wapi_requests.cc b/google_apis/drive/gdata_wapi_requests.cc
|
| index 4259217207565906496c19f1e3946354617c4c42..7c3e532d1472cead696231073b3818fba59edb99 100644
|
| --- a/google_apis/drive/gdata_wapi_requests.cc
|
| +++ b/google_apis/drive/gdata_wapi_requests.cc
|
| @@ -4,22 +4,37 @@
|
|
|
| #include "google_apis/drive/gdata_wapi_requests.h"
|
|
|
| +#include "base/location.h"
|
| +#include "base/sequenced_task_runner.h"
|
| +#include "base/task_runner_util.h"
|
| +#include "base/values.h"
|
| +#include "google_apis/drive/gdata_wapi_parser.h"
|
| #include "google_apis/drive/gdata_wapi_url_generator.h"
|
|
|
| namespace google_apis {
|
|
|
| -//============================ GetResourceEntryRequest =======================
|
| +namespace {
|
| +
|
| +scoped_ptr<ResourceEntry> ParseResourceEntry(const std::string& json) {
|
| + scoped_ptr<base::Value> value = ParseJson(json);
|
| + return value ? ResourceEntry::ExtractAndParse(*value) :
|
| + scoped_ptr<ResourceEntry>();
|
| +}
|
| +
|
| +} // namespace
|
|
|
| GetResourceEntryRequest::GetResourceEntryRequest(
|
| RequestSender* sender,
|
| const GDataWapiUrlGenerator& url_generator,
|
| const std::string& resource_id,
|
| const GURL& embed_origin,
|
| - const GetDataCallback& callback)
|
| - : GetDataRequest(sender, callback),
|
| + const GetResourceEntryCallback& callback)
|
| + : UrlFetchRequestBase(sender),
|
| url_generator_(url_generator),
|
| resource_id_(resource_id),
|
| - embed_origin_(embed_origin) {
|
| + embed_origin_(embed_origin),
|
| + callback_(callback),
|
| + weak_ptr_factory_(this) {
|
| DCHECK(!callback.is_null());
|
| }
|
|
|
| @@ -30,4 +45,37 @@ GURL GetResourceEntryRequest::GetURL() const {
|
| resource_id_, embed_origin_);
|
| }
|
|
|
| +void GetResourceEntryRequest::ProcessURLFetchResults(
|
| + const net::URLFetcher* source) {
|
| + GDataErrorCode error = GetErrorCode();
|
| + switch (error) {
|
| + case HTTP_SUCCESS:
|
| + case HTTP_CREATED:
|
| + base::PostTaskAndReplyWithResult(
|
| + blocking_task_runner(),
|
| + FROM_HERE,
|
| + base::Bind(&ParseResourceEntry, response_writer()->data()),
|
| + base::Bind(&GetResourceEntryRequest::OnDataParsed,
|
| + weak_ptr_factory_.GetWeakPtr(), error));
|
| + break;
|
| + default:
|
| + RunCallbackOnPrematureFailure(error);
|
| + OnProcessURLFetchResultsComplete();
|
| + break;
|
| + }
|
| +}
|
| +
|
| +void GetResourceEntryRequest::RunCallbackOnPrematureFailure(
|
| + GDataErrorCode error) {
|
| + callback_.Run(error, scoped_ptr<ResourceEntry>());
|
| +}
|
| +
|
| +void GetResourceEntryRequest::OnDataParsed(GDataErrorCode error,
|
| + scoped_ptr<ResourceEntry> entry) {
|
| + if (!entry)
|
| + error = GDATA_PARSE_ERROR;
|
| + callback_.Run(error, entry.Pass());
|
| + OnProcessURLFetchResultsComplete();
|
| +}
|
| +
|
| } // namespace google_apis
|
|
|