| 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(),
|
|
|