Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / google_apis / drive / gdata_wapi_requests.cc
index 4259217..7c3e532 100644 (file)
@@ -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