Chromium Code Reviews| Index: content/public/test/browser_test_utils.cc |
| diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc |
| index 0ba575af209376d9c6dddba210948f30b0391a77..2cafeb23d5a2ab47ce27670a9062040846b91d21 100644 |
| --- a/content/public/test/browser_test_utils.cc |
| +++ b/content/public/test/browser_test_utils.cc |
| @@ -58,6 +58,8 @@ |
| #include "content/test/accessibility_browser_test_utils.h" |
| #include "net/base/filename_util.h" |
| #include "net/cookies/cookie_store.h" |
| +#include "net/filter/filter.h" |
| +#include "net/filter/gzip_header.h" |
| #include "net/test/embedded_test_server/embedded_test_server.h" |
| #include "net/test/embedded_test_server/http_request.h" |
| #include "net/test/embedded_test_server/http_response.h" |
| @@ -375,6 +377,38 @@ class TestNavigationManagerThrottle : public NavigationThrottle { |
| base::Closure on_will_start_request_closure_; |
| }; |
| +bool HasGzipHeader(const base::RefCountedMemory& maybe_gzipped) { |
| + net::GZipHeader header; |
| + net::GZipHeader::Status header_status = net::GZipHeader::INCOMPLETE_HEADER; |
| + // TODO(dbeam): why do we even have this lever^Wparameter? |
|
mmenke
2016/08/18 14:40:35
^W?
I assume it's so ReadMore can continue where
Dan Beam
2016/08/18 20:56:50
means "remove word"
https://en.wikipedia.org/wiki/
|
| + const char* header_end = NULL; |
|
mmenke
2016/08/18 14:40:36
nullptr
Dan Beam
2016/08/18 20:56:50
Done.
|
| + while (header_status == net::GZipHeader::INCOMPLETE_HEADER) { |
| + header_status = header.ReadMore(maybe_gzipped.front_as<char>(), |
| + maybe_gzipped.size(), |
| + &header_end); |
| + } |
| + return header_status == net::GZipHeader::COMPLETE_HEADER; |
| +} |
| + |
| +void AppendGzippedResource(const base::RefCountedMemory& encoded, |
| + std::string* to_append) { |
| + std::unique_ptr<net::Filter> filter = net::Filter::GZipFactory(); |
|
mmenke
2016/08/18 14:40:36
Need to make net::Filter NET_EXPORT (It's NET_EXPO
Dan Beam
2016/08/18 20:56:50
Done.
|
| + memcpy(filter->stream_buffer()->data(), encoded.front_as<char>(), |
| + encoded.size()); |
| + filter->FlushStreamBuffer(encoded.size()); |
| + |
| + const int kBufferSize = 4096; |
| + char dest_buffer[kBufferSize]; |
| + |
| + net::Filter::FilterStatus status; |
| + do { |
| + int read_size = kBufferSize; |
| + status = filter->ReadData(dest_buffer, &read_size); |
| + ASSERT_NE(status, net::Filter::FILTER_ERROR); |
| + to_append->append(dest_buffer, read_size); |
| + } while (status != net::Filter::FILTER_DONE); |
| +} |
| + |
| } // namespace |
| bool NavigateIframeToURL(WebContents* web_contents, |
| @@ -844,9 +878,14 @@ bool ExecuteWebUIResourceTest(WebContents* web_contents, |
| for (std::vector<int>::iterator iter = ids.begin(); |
| iter != ids.end(); |
| ++iter) { |
| - scoped_refptr<base::RefCountedMemory> resource = |
| + scoped_refptr<base::RefCountedMemory> bytes = |
| ResourceBundle::GetSharedInstance().LoadDataResourceBytes(*iter); |
| - script.append(resource->front_as<char>(), resource->size()); |
| + |
| + if (HasGzipHeader(*bytes)) |
| + AppendGzippedResource(*bytes, &script); |
| + else |
| + script.append(bytes->front_as<char>(), bytes->size()); |
| + |
| script.append("\n"); |
| } |
| if (!ExecuteScript(web_contents, script)) |