| 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_;
|
|
|