Index: mojo/shell/dynamic_service_loader.cc |
diff --git a/mojo/shell/dynamic_service_loader.cc b/mojo/shell/dynamic_service_loader.cc |
index 994e3184bbc1fe729a253186a4b2a6524026b802..2b20243e182ee8e177261bad1cd0a93d86bb5350 100644 |
--- a/mojo/shell/dynamic_service_loader.cc |
+++ b/mojo/shell/dynamic_service_loader.cc |
@@ -80,19 +80,19 @@ class LocalLoader : public Loader { |
}; |
// For loading services via the network stack. |
-class NetworkLoader : public Loader, public URLLoaderClient { |
+class NetworkLoader : public Loader { |
public: |
explicit NetworkLoader(scoped_ptr<DynamicServiceRunner> runner, |
NetworkService* network_service) |
: Loader(runner.Pass()) { |
network_service->CreateURLLoader(Get(&url_loader_)); |
- url_loader_.set_client(this); |
} |
virtual void Start(const GURL& url, |
ScopedMessagePipeHandle service_handle, |
Context* context) OVERRIDE { |
service_handle_ = service_handle.Pass(); |
+ context_ = context; |
URLRequestPtr request(URLRequest::New()); |
request->url = url.spec(); |
@@ -103,17 +103,9 @@ class NetworkLoader : public Loader, public URLLoaderClient { |
request->bypass_cache = true; |
} |
- DataPipe data_pipe; |
- url_loader_->Start(request.Pass(), data_pipe.producer_handle.Pass()); |
- |
- base::CreateTemporaryFile(&file_); |
- common::CopyToFile(data_pipe.consumer_handle.Pass(), |
- file_, |
- context->task_runners()->blocking_pool(), |
- base::Bind(&Loader::StartService, |
- base::Unretained(this), |
- file_, |
- base::Passed(&service_handle_))); |
+ url_loader_->Start(request.Pass(), |
+ base::Bind(&NetworkLoader::OnReceivedResponse, |
+ base::Unretained(this))); |
} |
private: |
@@ -122,16 +114,24 @@ class NetworkLoader : public Loader, public URLLoaderClient { |
base::DeleteFile(file_, false); |
} |
- // URLLoaderClient methods: |
- virtual void OnReceivedRedirect(URLResponsePtr response, |
- const String& new_url, |
- const String& new_method) OVERRIDE { |
- // TODO(darin): Handle redirects properly! |
+ void OnReceivedResponse(URLResponsePtr response) { |
+ if (response->error) { |
+ LOG(ERROR) << "Error (" << response->error->code << ": " |
+ << response->error->description << ") while fetching " |
+ << response->url; |
+ } |
+ |
+ base::CreateTemporaryFile(&file_); |
+ common::CopyToFile(response->body.Pass(), |
+ file_, |
+ context_->task_runners()->blocking_pool(), |
+ base::Bind(&Loader::StartService, |
+ base::Unretained(this), |
+ file_, |
+ base::Passed(&service_handle_))); |
} |
- virtual void OnReceivedResponse(URLResponsePtr response) OVERRIDE {} |
- virtual void OnReceivedError(NetworkErrorPtr error) OVERRIDE {} |
- virtual void OnReceivedEndOfResponseBody() OVERRIDE {} |
+ Context* context_; |
NetworkServicePtr network_service_; |
URLLoaderPtr url_loader_; |
ScopedMessagePipeHandle service_handle_; |