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

Unified Diff: chrome/browser/chromeos/file_system_provider/request_manager.cc

Issue 257493004: [fsp] Refactor handling operations. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed tests. Created 6 years, 8 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
Index: chrome/browser/chromeos/file_system_provider/request_manager.cc
diff --git a/chrome/browser/chromeos/file_system_provider/request_manager.cc b/chrome/browser/chromeos/file_system_provider/request_manager.cc
index ae2c4a485bed5cb1f207a9e7ca096f33f447b301..40e4b1a10dd532c5364632a02da681ce536d4ef7 100644
--- a/chrome/browser/chromeos/file_system_provider/request_manager.cc
+++ b/chrome/browser/chromeos/file_system_provider/request_manager.cc
@@ -6,7 +6,6 @@
#include "base/files/file.h"
#include "base/stl_util.h"
-#include "base/values.h"
namespace chromeos {
namespace file_system_provider {
@@ -37,8 +36,7 @@ RequestManager::~RequestManager() {
STLDeleteValues(&requests_);
}
-int RequestManager::CreateRequest(const SuccessCallback& success_callback,
- const ErrorCallback& error_callback) {
+int RequestManager::CreateRequest(scoped_ptr<HandlerInterface> handler) {
// The request id is unique per request manager, so per service, thereof
// per profile.
int request_id = next_id_++;
@@ -48,8 +46,7 @@ int RequestManager::CreateRequest(const SuccessCallback& success_callback,
return 0;
Request* request = new Request;
- request->success_callback = success_callback;
- request->error_callback = error_callback;
+ request->handler = handler.Pass();
request->timeout_timer.Start(FROM_HERE,
timeout_,
base::Bind(&RequestManager::OnRequestTimeout,
@@ -57,19 +54,28 @@ int RequestManager::CreateRequest(const SuccessCallback& success_callback,
request_id));
requests_[request_id] = request;
+ // Execute the request implementation. In case of an execution failure,
+ // unregister and return 0. This may often happen, eg. if the providing
+ // extension is not listening for the request event being sent.
+ // In such case, there is no reason we should abort as soon as possible.
+ if (!request->handler->Execute(request_id)) {
+ delete request;
+ requests_.erase(request_id);
+ return 0;
+ }
+
return request_id;
}
bool RequestManager::FulfillRequest(int request_id,
- scoped_ptr<base::DictionaryValue> response,
+ scoped_ptr<RequestValue> response,
bool has_next) {
RequestMap::iterator request_it = requests_.find(request_id);
if (request_it == requests_.end())
return false;
- if (!request_it->second->success_callback.is_null())
- request_it->second->success_callback.Run(response.Pass(), has_next);
+ request_it->second->handler->OnSuccess(request_id, response.Pass(), has_next);
if (!has_next) {
delete request_it->second;
requests_.erase(request_it);
@@ -86,8 +92,7 @@ bool RequestManager::RejectRequest(int request_id, base::File::Error error) {
if (request_it == requests_.end())
return false;
- if (!request_it->second->error_callback.is_null())
- request_it->second->error_callback.Run(error);
+ request_it->second->handler->OnError(request_id, error);
delete request_it->second;
requests_.erase(request_it);

Powered by Google App Engine
This is Rietveld 408576698