Commit 75f9ed06 authored by Erik Luo's avatar Erik Luo Committed by Commit Bot

DevTools: serve MimeType as ContentType for debug_devtools

- Adds ShouldServeMimeTypeAsContentTypeHeader() on URLRequestFileJob
- With debug_devtools, our interceptor now serves files with
  ContentType header, allowing DevTools to importScripts() on
  locally-served bundled files.
- Without this CL, strict MIME-type checks prevent importScripts()
  in FormatterWorker, required for pretty-print and autocomplete.

Bug: 882013
Change-Id: Ib61284cfccd430dd9a4ddae769a416147c504e05
Reviewed-on: https://chromium-review.googlesource.com/1214365Reviewed-by: default avatarMatt Menke <mmenke@chromium.org>
Reviewed-by: default avatarDmitry Gozman <dgozman@chromium.org>
Commit-Queue: Erik Luo <luoe@chromium.org>
Cr-Commit-Position: refs/heads/master@{#589944}
parent 3a382ea6
......@@ -267,12 +267,15 @@ class DebugDevToolsInterceptor : public net::URLRequestInterceptor {
net::URLRequest* request,
net::NetworkDelegate* network_delegate) const override {
base::FilePath path;
if (IsSupportedDevToolsURL(request->url(), &path))
return new net::URLRequestFileJob(
if (IsSupportedDevToolsURL(request->url(), &path)) {
net::URLRequestFileJob* job = new net::URLRequestFileJob(
request, network_delegate, path,
base::CreateTaskRunnerWithTraits(
{base::MayBlock(), base::TaskPriority::USER_VISIBLE,
base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}));
job->ShouldServeMimeTypeAsContentTypeHeader();
return job;
}
return NULL;
}
......
......@@ -23,6 +23,7 @@
#include "base/compiler_specific.h"
#include "base/files/file_util.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/synchronization/lock.h"
#include "base/task_runner.h"
#include "base/threading/thread_restrictions.h"
......@@ -178,6 +179,17 @@ void URLRequestFileJob::SetExtraRequestHeaders(
}
}
void URLRequestFileJob::GetResponseInfo(HttpResponseInfo* info) {
if (!serve_mime_type_as_content_type_ || !meta_info_.mime_type_result)
return;
auto headers =
base::MakeRefCounted<net::HttpResponseHeaders>("HTTP/1.1 200 OK");
headers->AddHeader(base::StringPrintf("%s: %s",
net::HttpRequestHeaders::kContentType,
meta_info_.mime_type.c_str()));
info->headers = headers;
}
void URLRequestFileJob::OnOpenComplete(int result) {}
void URLRequestFileJob::OnSeekComplete(int64_t result) {}
......
......@@ -46,6 +46,10 @@ class NET_EXPORT URLRequestFileJob : public URLRequestJob {
bool* insecure_scheme_was_upgraded) override;
bool GetMimeType(std::string* mime_type) const override;
void SetExtraRequestHeaders(const HttpRequestHeaders& headers) override;
void ShouldServeMimeTypeAsContentTypeHeader() {
serve_mime_type_as_content_type_ = true;
};
void GetResponseInfo(HttpResponseInfo* info) override;
// An interface for subclasses who wish to monitor read operations.
//
......@@ -124,6 +128,7 @@ class NET_EXPORT URLRequestFileJob : public URLRequestJob {
std::vector<HttpByteRange> byte_ranges_;
HttpByteRange byte_range_;
int64_t remaining_bytes_;
bool serve_mime_type_as_content_type_ = false;
Error range_parse_result_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment