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

Side by Side Diff: mojo/examples/html_viewer/weburlloader_impl.cc

Issue 373373002: Mojo: Refactor URLLoader interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixes per review Created 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « mojo/examples/html_viewer/weburlloader_impl.h ('k') | mojo/examples/png_viewer/png_viewer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "mojo/examples/html_viewer/weburlloader_impl.h" 5 #include "mojo/examples/html_viewer/weburlloader_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/thread_task_runner_handle.h" 9 #include "base/thread_task_runner_handle.h"
10 #include "mojo/services/public/interfaces/network/network_service.mojom.h" 10 #include "mojo/services/public/interfaces/network/network_service.mojom.h"
(...skipping 29 matching lines...) Expand all
40 WebURLRequestExtraData::WebURLRequestExtraData() { 40 WebURLRequestExtraData::WebURLRequestExtraData() {
41 } 41 }
42 42
43 WebURLRequestExtraData::~WebURLRequestExtraData() { 43 WebURLRequestExtraData::~WebURLRequestExtraData() {
44 } 44 }
45 45
46 WebURLLoaderImpl::WebURLLoaderImpl(NetworkService* network_service) 46 WebURLLoaderImpl::WebURLLoaderImpl(NetworkService* network_service)
47 : client_(NULL), 47 : client_(NULL),
48 weak_factory_(this) { 48 weak_factory_(this) {
49 network_service->CreateURLLoader(Get(&url_loader_)); 49 network_service->CreateURLLoader(Get(&url_loader_));
50 url_loader_.set_client(this);
51 } 50 }
52 51
53 WebURLLoaderImpl::~WebURLLoaderImpl() { 52 WebURLLoaderImpl::~WebURLLoaderImpl() {
54 } 53 }
55 54
56 void WebURLLoaderImpl::loadSynchronously( 55 void WebURLLoaderImpl::loadSynchronously(
57 const blink::WebURLRequest& request, 56 const blink::WebURLRequest& request,
58 blink::WebURLResponse& response, 57 blink::WebURLResponse& response,
59 blink::WebURLError& error, 58 blink::WebURLError& error,
60 blink::WebData& data) { 59 blink::WebData& data) {
61 NOTIMPLEMENTED(); 60 NOTIMPLEMENTED();
62 } 61 }
63 62
64 void WebURLLoaderImpl::loadAsynchronously(const blink::WebURLRequest& request, 63 void WebURLLoaderImpl::loadAsynchronously(const blink::WebURLRequest& request,
65 blink::WebURLLoaderClient* client) { 64 blink::WebURLLoaderClient* client) {
66 client_ = client; 65 client_ = client;
66 url_ = request.url();
67 67
68 URLRequestPtr url_request(URLRequest::New()); 68 URLRequestPtr url_request(URLRequest::New());
69 url_request->url = request.url().spec(); 69 url_request->url = url_.spec();
70 url_request->auto_follow_redirects = false; 70 url_request->auto_follow_redirects = false;
71 // TODO(darin): Copy other fields. 71 // TODO(darin): Copy other fields.
72 72
73 if (request.extraData()) { 73 if (request.extraData()) {
74 WebURLRequestExtraData* extra_data = 74 WebURLRequestExtraData* extra_data =
75 static_cast<WebURLRequestExtraData*>(request.extraData()); 75 static_cast<WebURLRequestExtraData*>(request.extraData());
76 response_body_stream_ = extra_data->synthetic_response_body_stream.Pass();
77 base::ThreadTaskRunnerHandle::Get()->PostTask( 76 base::ThreadTaskRunnerHandle::Get()->PostTask(
78 FROM_HERE, 77 FROM_HERE,
79 base::Bind(&WebURLLoaderImpl::OnReceivedResponse, 78 base::Bind(&WebURLLoaderImpl::OnReceivedResponse,
80 weak_factory_.GetWeakPtr(), 79 weak_factory_.GetWeakPtr(),
81 base::Passed(&extra_data->synthetic_response))); 80 base::Passed(&extra_data->synthetic_response)));
82 } else { 81 } else {
83 DataPipe pipe; 82 url_loader_->Start(url_request.Pass(),
84 url_loader_->Start(url_request.Pass(), pipe.producer_handle.Pass()); 83 base::Bind(&WebURLLoaderImpl::OnReceivedResponse,
85 response_body_stream_ = pipe.consumer_handle.Pass(); 84 weak_factory_.GetWeakPtr()));
86 } 85 }
87 } 86 }
88 87
89 void WebURLLoaderImpl::cancel() { 88 void WebURLLoaderImpl::cancel() {
90 url_loader_.reset(); 89 url_loader_.reset();
91 response_body_stream_.reset(); 90 response_body_stream_.reset();
92 91
93 NetworkErrorPtr network_error(NetworkError::New()); 92 URLResponsePtr failed_response(URLResponse::New());
94 network_error->code = net::ERR_ABORTED; 93 failed_response->url = url_.spec();
94 failed_response->error = NetworkError::New();
95 failed_response->error->code = net::ERR_ABORTED;
95 96
96 base::ThreadTaskRunnerHandle::Get()->PostTask( 97 base::ThreadTaskRunnerHandle::Get()->PostTask(
97 FROM_HERE, 98 FROM_HERE,
98 base::Bind(&WebURLLoaderImpl::OnReceivedError, 99 base::Bind(&WebURLLoaderImpl::OnReceivedResponse,
99 weak_factory_.GetWeakPtr(), 100 weak_factory_.GetWeakPtr(),
100 base::Passed(&network_error))); 101 base::Passed(&failed_response)));
101 } 102 }
102 103
103 void WebURLLoaderImpl::setDefersLoading(bool defers_loading) { 104 void WebURLLoaderImpl::setDefersLoading(bool defers_loading) {
104 NOTIMPLEMENTED(); 105 NOTIMPLEMENTED();
105 } 106 }
106 107
107 void WebURLLoaderImpl::OnReceivedRedirect(URLResponsePtr url_response, 108 void WebURLLoaderImpl::OnReceivedResponse(URLResponsePtr url_response) {
108 const String& new_url, 109 url_ = GURL(url_response->url);
109 const String& new_method) { 110
111 if (url_response->error) {
112 OnReceivedError(url_response.Pass());
113 } else if (url_response->redirect_url) {
114 OnReceivedRedirect(url_response.Pass());
115 } else {
116 client_->didReceiveResponse(this, ToWebURLResponse(url_response));
117
118 // Start streaming data
119 response_body_stream_ = url_response->body.Pass();
120 ReadMore();
121 }
122 }
123
124 void WebURLLoaderImpl::OnReceivedError(URLResponsePtr url_response) {
125 blink::WebURLError web_error;
126 web_error.domain = blink::WebString::fromUTF8(net::kErrorDomain);
127 web_error.reason = url_response->error->code;
128 web_error.unreachableURL = GURL(url_response->url);
129 web_error.staleCopyInCache = false;
130 web_error.isCancellation =
131 url_response->error->code == net::ERR_ABORTED ? true : false;
132
133 client_->didFail(this, web_error);
134 }
135
136 void WebURLLoaderImpl::OnReceivedRedirect(URLResponsePtr url_response) {
110 blink::WebURLRequest new_request; 137 blink::WebURLRequest new_request;
111 new_request.initialize(); 138 new_request.initialize();
112 new_request.setURL(GURL(new_url)); 139 new_request.setURL(GURL(url_response->redirect_url));
140 new_request.setHTTPMethod(
141 blink::WebString::fromUTF8(url_response->redirect_method));
113 142
114 client_->willSendRequest(this, new_request, ToWebURLResponse(url_response)); 143 client_->willSendRequest(this, new_request, ToWebURLResponse(url_response));
115 // TODO(darin): Check if new_request was rejected. 144 // TODO(darin): Check if new_request was rejected.
116 145
117 url_loader_->FollowRedirect(); 146 url_loader_->FollowRedirect(
118 } 147 base::Bind(&WebURLLoaderImpl::OnReceivedResponse,
119 148 weak_factory_.GetWeakPtr()));
120 void WebURLLoaderImpl::OnReceivedResponse(URLResponsePtr url_response) {
121 client_->didReceiveResponse(this, ToWebURLResponse(url_response));
122
123 // Start streaming data
124 ReadMore();
125 }
126
127 void WebURLLoaderImpl::OnReceivedError(NetworkErrorPtr error) {
128 blink::WebURLError web_error;
129 web_error.domain = blink::WebString::fromUTF8(net::kErrorDomain);
130 web_error.reason = error->code;
131 web_error.unreachableURL = GURL(); // TODO(darin): Record this.
132 web_error.staleCopyInCache = false;
133 web_error.isCancellation = error->code == net::ERR_ABORTED ? true : false;
134
135 client_->didFail(this, web_error);
136 }
137
138 void WebURLLoaderImpl::OnReceivedEndOfResponseBody() {
139 // This is the signal that the response body was not truncated.
140 } 149 }
141 150
142 void WebURLLoaderImpl::ReadMore() { 151 void WebURLLoaderImpl::ReadMore() {
143 const void* buf; 152 const void* buf;
144 uint32_t buf_size; 153 uint32_t buf_size;
145 MojoResult rv = BeginReadDataRaw(response_body_stream_.get(), 154 MojoResult rv = BeginReadDataRaw(response_body_stream_.get(),
146 &buf, 155 &buf,
147 &buf_size, 156 &buf_size,
148 MOJO_READ_DATA_FLAG_NONE); 157 MOJO_READ_DATA_FLAG_NONE);
149 if (rv == MOJO_RESULT_OK) { 158 if (rv == MOJO_RESULT_OK) {
(...skipping 22 matching lines...) Expand all
172 base::Bind(&WebURLLoaderImpl::OnResponseBodyStreamReady, 181 base::Bind(&WebURLLoaderImpl::OnResponseBodyStreamReady,
173 weak_factory_.GetWeakPtr())); 182 weak_factory_.GetWeakPtr()));
174 } 183 }
175 184
176 void WebURLLoaderImpl::OnResponseBodyStreamReady(MojoResult result) { 185 void WebURLLoaderImpl::OnResponseBodyStreamReady(MojoResult result) {
177 ReadMore(); 186 ReadMore();
178 } 187 }
179 188
180 } // namespace examples 189 } // namespace examples
181 } // namespace mojo 190 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/examples/html_viewer/weburlloader_impl.h ('k') | mojo/examples/png_viewer/png_viewer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698