Index: mojo/services/html_viewer/html_document_view.cc |
diff --git a/mojo/services/html_viewer/html_document_view.cc b/mojo/services/html_viewer/html_document_view.cc |
index e304ad20bfe858d04384f2b4cf6500a13a588715..7751aa4e07dc74502b2cf07b10d5b40ee3ae7734 100644 |
--- a/mojo/services/html_viewer/html_document_view.cc |
+++ b/mojo/services/html_viewer/html_document_view.cc |
@@ -11,6 +11,7 @@ |
#include "base/thread_task_runner_handle.h" |
#include "mojo/public/cpp/system/data_pipe.h" |
#include "mojo/services/html_viewer/blink_input_events_type_converters.h" |
+#include "mojo/services/html_viewer/blink_url_request_type_converters.h" |
#include "mojo/services/html_viewer/webstoragenamespace_impl.h" |
#include "mojo/services/html_viewer/weburlloader_impl.h" |
#include "mojo/services/public/cpp/view_manager/view.h" |
@@ -32,83 +33,6 @@ |
namespace mojo { |
namespace { |
-// Ripped from web_url_loader_impl.cc. Why is everything so complicated? |
-class HeaderFlattener : public blink::WebHTTPHeaderVisitor { |
- public: |
- HeaderFlattener() : has_accept_header_(false) {} |
- |
- virtual void visitHeader(const blink::WebString& name, |
- const blink::WebString& value) { |
- // Headers are latin1. |
- const std::string& name_latin1 = name.latin1(); |
- const std::string& value_latin1 = value.latin1(); |
- |
- // Skip over referrer headers found in the header map because we already |
- // pulled it out as a separate parameter. |
- if (LowerCaseEqualsASCII(name_latin1, "referer")) |
- return; |
- |
- if (LowerCaseEqualsASCII(name_latin1, "accept")) |
- has_accept_header_ = true; |
- |
- buffer_.push_back(name_latin1 + ": " + value_latin1); |
- } |
- |
- Array<String> GetBuffer() { |
- // In some cases, WebKit doesn't add an Accept header, but not having the |
- // header confuses some web servers. See bug 808613. |
- if (!has_accept_header_) { |
- buffer_.push_back("Accept: */*"); |
- has_accept_header_ = true; |
- } |
- return buffer_.Pass(); |
- } |
- |
- private: |
- Array<String> buffer_; |
- bool has_accept_header_; |
-}; |
- |
-void AddRequestBody(NavigationDetails* nav_details, |
- const blink::WebURLRequest& request) { |
- if (request.httpBody().isNull()) |
- return; |
- |
- uint32_t i = 0; |
- blink::WebHTTPBody::Element element; |
- while (request.httpBody().elementAt(i++, element)) { |
- switch (element.type) { |
- case blink::WebHTTPBody::Element::TypeData: |
- if (!element.data.isEmpty()) { |
- // WebKit sometimes gives up empty data to append. These aren't |
- // necessary so we just optimize those out here. |
- uint32_t num_bytes = static_cast<uint32_t>(element.data.size()); |
- MojoCreateDataPipeOptions options; |
- options.struct_size = sizeof(MojoCreateDataPipeOptions); |
- options.flags = MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE; |
- options.element_num_bytes = 1; |
- options.capacity_num_bytes = num_bytes; |
- DataPipe data_pipe(options); |
- nav_details->request->body.push_back( |
- data_pipe.consumer_handle.Pass()); |
- WriteDataRaw(data_pipe.producer_handle.get(), |
- element.data.data(), |
- &num_bytes, |
- MOJO_WRITE_DATA_FLAG_ALL_OR_NONE); |
- } |
- break; |
- case blink::WebHTTPBody::Element::TypeFile: |
- case blink::WebHTTPBody::Element::TypeFileSystemURL: |
- case blink::WebHTTPBody::Element::TypeBlob: |
- // TODO(mpcomplete): handle these. |
- NOTIMPLEMENTED(); |
- break; |
- default: |
- NOTREACHED(); |
- } |
- } |
-} |
- |
void ConfigureSettings(blink::WebSettings* settings) { |
settings->setAcceleratedCompositingEnabled(false); |
settings->setCookieEnabled(true); |
@@ -235,14 +159,7 @@ blink::WebNavigationPolicy HTMLDocumentView::decidePolicyForNavigation( |
return default_policy; |
NavigationDetailsPtr nav_details(NavigationDetails::New()); |
- nav_details->request->url = request.url().string().utf8(); |
- nav_details->request->method = request.httpMethod().utf8(); |
- |
- HeaderFlattener flattener; |
- request.visitHTTPHeaderFields(&flattener); |
- nav_details->request->headers = flattener.GetBuffer().Pass(); |
- |
- AddRequestBody(nav_details.get(), request); |
+ nav_details->request = URLRequest::From(request); |
navigator_host_->RequestNavigate( |
root_->id(), |