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

Unified Diff: chrome/browser/chromeos/gdata/operations_base.cc

Issue 10797027: Revert 147413 - gdrive: Get JSON feeds parsing off the UI thread. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 5 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 | « chrome/browser/chromeos/gdata/operations_base.h ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/gdata/operations_base.cc
===================================================================
--- chrome/browser/chromeos/gdata/operations_base.cc (revision 147421)
+++ chrome/browser/chromeos/gdata/operations_base.cc (working copy)
@@ -45,28 +45,6 @@
const char kSpreadsheetsScope[] = "https://spreadsheets.google.com/feeds/";
const char kUserContentScope[] = "https://docs.googleusercontent.com/";
-// Parse JSON string to base::Value object.
-void ParseJsonOnBlockingPool(const std::string& data,
- scoped_ptr<base::Value>* value) {
- DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- int error_code = -1;
- std::string error_message;
- value->reset(base::JSONReader::ReadAndReturnError(data,
- base::JSON_PARSE_RFC,
- &error_code,
- &error_message));
-
- if (!value->get()) {
- LOG(ERROR) << "Error while parsing entry response: "
- << error_message
- << ", code: "
- << error_code
- << ", data:\n"
- << data;
- }
-}
-
} // namespace
namespace gdata {
@@ -351,9 +329,7 @@
GetDataOperation::GetDataOperation(GDataOperationRegistry* registry,
Profile* profile,
const GetDataCallback& callback)
- : UrlFetchOperationBase(registry, profile),
- callback_(callback),
- weak_ptr_factory_(this) {
+ : UrlFetchOperationBase(registry, profile), callback_(callback) {
}
GetDataOperation::~GetDataOperation() {}
@@ -362,70 +338,48 @@
std::string data;
source->GetResponseAsString(&data);
scoped_ptr<base::Value> root_value;
- GDataErrorCode fetch_error_code = GetErrorCode(source);
- bool ret = false;
+ GDataErrorCode code = GetErrorCode(source);
- switch (fetch_error_code) {
+ switch (code) {
case HTTP_SUCCESS:
- case HTTP_CREATED:
- ret = ParseResponse(fetch_error_code, data);
+ case HTTP_CREATED: {
+ root_value.reset(ParseResponse(data));
+ if (!root_value.get())
+ code = GDATA_PARSE_ERROR;
+
break;
+ }
default:
- RunCallback(fetch_error_code, scoped_ptr<base::Value>());
break;
}
- return ret;
+ if (!callback_.is_null())
+ callback_.Run(code, root_value.Pass());
+ return root_value.get() != NULL;
}
-void GetDataOperation::RunCallbackOnPrematureFailure(
- GDataErrorCode fetch_error_code) {
+void GetDataOperation::RunCallbackOnPrematureFailure(GDataErrorCode code) {
if (!callback_.is_null()) {
scoped_ptr<base::Value> root_value;
- callback_.Run(fetch_error_code, root_value.Pass());
+ callback_.Run(code, root_value.Pass());
}
}
-bool GetDataOperation::ParseResponse(GDataErrorCode fetch_error_code,
- const std::string& data) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- // Uses this hack to avoid deep-copy of json object because json might be so
- // big.
- // This pointer of scped_ptr is to ensure a deletion of the parsed json value
- // object, even when OnDataParsed() is not called.
- scoped_ptr<base::Value>* parsed_value = new scoped_ptr<base::Value>();
-
- return BrowserThread::PostBlockingPoolTaskAndReply(
- FROM_HERE,
- base::Bind(&ParseJsonOnBlockingPool,
- data,
- parsed_value),
- base::Bind(&GetDataOperation::OnDataParsed,
- weak_ptr_factory_.GetWeakPtr(),
- fetch_error_code,
- base::Owned(parsed_value)));
+base::Value* GetDataOperation::ParseResponse(const std::string& data) {
+ int error_code = -1;
+ std::string error_message;
+ scoped_ptr<base::Value> root_value(base::JSONReader::ReadAndReturnError(
+ data, base::JSON_PARSE_RFC, &error_code, &error_message));
+ if (!root_value.get()) {
+ LOG(ERROR) << "Error while parsing entry response: "
+ << error_message
+ << ", code: "
+ << error_code
+ << ", data:\n"
+ << data;
+ return NULL;
+ }
+ return root_value.release();
}
-void GetDataOperation::RunCallback(GDataErrorCode fetch_error_code,
- scoped_ptr<base::Value> value) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (!callback_.is_null())
- callback_.Run(fetch_error_code, value.Pass());
-}
-
-void GetDataOperation::OnDataParsed(GDataErrorCode fetch_error_code,
- scoped_ptr<base::Value>* value) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (!value->get())
- fetch_error_code = GDATA_PARSE_ERROR;
-
- // The ownership of the parsed json object is transfered to RunCallBack(),
- // keeping the ownership of the |value| here.
- RunCallback(fetch_error_code, value->Pass());
- DCHECK(!value->get());
-
- // |value| will be deleted after return beause it is base::Owned()'d.
-}
-
} // namespace gdata
« no previous file with comments | « chrome/browser/chromeos/gdata/operations_base.h ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698