Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
|
Charlie Harrison
2017/02/27 21:54:44
nit: 2017
RyanSturm
2017/02/27 22:13:08
Done.
| |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include <memory> | |
| 6 | |
| 7 #include "base/macros.h" | |
| 8 #include "base/memory/ptr_util.h" | |
| 9 #include "base/memory/ref_counted.h" | |
| 10 #include "base/values.h" | |
| 11 #include "content/browser/loader/netlog_observer.h" | |
| 12 #include "content/browser/loader/resource_request_info_impl.h" | |
| 13 #include "content/browser/loader/resource_requester_info.h" | |
| 14 #include "content/public/common/previews_state.h" | |
| 15 #include "content/public/common/resource_type.h" | |
| 16 #include "content/public/test/mock_resource_context.h" | |
| 17 #include "content/public/test/test_browser_thread_bundle.h" | |
| 18 #include "net/base/request_priority.h" | |
| 19 #include "net/log/net_log.h" | |
| 20 #include "net/log/net_log_capture_mode.h" | |
| 21 #include "net/log/net_log_event_type.h" | |
| 22 #include "net/quic/core/quic_types.h" | |
| 23 #include "net/spdy/spdy_header_block.h" | |
| 24 #include "net/spdy/spdy_protocol.h" | |
| 25 #include "net/url_request/url_request_context.h" | |
| 26 #include "net/url_request/url_request_netlog_params.h" | |
| 27 #include "net/url_request/url_request_test_util.h" | |
| 28 #include "testing/gtest/include/gtest/gtest.h" | |
| 29 #include "third_party/WebKit/public/platform/WebPageVisibilityState.h" | |
| 30 #include "third_party/WebKit/public/platform/WebReferrerPolicy.h" | |
| 31 #include "ui/base/page_transition_types.h" | |
| 32 #include "url/gurl.h" | |
| 33 | |
| 34 namespace content { | |
| 35 | |
| 36 namespace { | |
|
Charlie Harrison
2017/02/27 21:54:43
nit:
namespace {
<code>
} // namespace
RyanSturm
2017/02/27 22:13:08
Done.
| |
| 37 std::unique_ptr<base::Value> QuicRequestCallback( | |
| 38 net::QuicStreamId stream_id, | |
| 39 const net::SpdyHeaderBlock* headers, | |
| 40 net::SpdyPriority priority, | |
| 41 net::NetLogCaptureMode capture_mode) { | |
| 42 std::unique_ptr<base::DictionaryValue> dict( | |
| 43 static_cast<base::DictionaryValue*>( | |
| 44 SpdyHeaderBlockNetLogCallback(headers, capture_mode).release())); | |
| 45 return std::move(dict); | |
| 46 } | |
| 47 } | |
| 48 | |
| 49 class NetLogObserverTest : public testing::Test { | |
|
Charlie Harrison
2017/02/27 21:54:43
A brief comment here or above the actual tests wou
RyanSturm
2017/02/27 22:13:08
Done.
| |
| 50 public: | |
| 51 NetLogObserverTest() | |
| 52 : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP), context_(true) {} | |
| 53 | |
| 54 ~NetLogObserverTest() override {} | |
| 55 | |
| 56 void SetUp() override { | |
| 57 context_.Init(); | |
| 58 context_.set_net_log(&net_log_); | |
| 59 NetLogObserver::Attach(context_.net_log()); | |
| 60 request_ = context_.CreateRequest(GURL("test:test"), net::DEFAULT_PRIORITY, | |
|
Charlie Harrison
2017/02/27 21:54:43
Nit: let's hoist this URL up to a constant, make i
RyanSturm
2017/02/27 22:13:08
Done.
| |
| 61 nullptr); | |
| 62 resource_context_ = base::MakeUnique<MockResourceContext>(&context_); | |
| 63 requester_info_ = ResourceRequesterInfo::CreateForRendererTesting(1); | |
| 64 ResourceRequestInfoImpl* info = new ResourceRequestInfoImpl( | |
| 65 requester_info_, | |
| 66 0, // route_id | |
| 67 -1, // frame_tree_node_id | |
| 68 0, // origin_pid | |
| 69 0, // request_id | |
| 70 0, // render_frame_id | |
| 71 false, // is_main_frame | |
| 72 false, // parent_is_main_frame | |
| 73 RESOURCE_TYPE_IMAGE, // resource_type | |
| 74 ui::PAGE_TRANSITION_LINK, // transition_type | |
| 75 false, // should_replace_current_entry | |
| 76 false, // is_download | |
| 77 false, // is_stream | |
| 78 false, // allow_download | |
| 79 false, // has_user_gesture | |
| 80 false, // enable load timing | |
| 81 false, // enable upload progress | |
| 82 false, // do_not_prompt_for_login | |
| 83 blink::WebReferrerPolicyDefault, // referrer_policy | |
| 84 blink::WebPageVisibilityStateVisible, // visibility_state | |
| 85 resource_context_.get(), // context | |
| 86 true, // report_raw_headers | |
| 87 true, // is_async | |
| 88 PREVIEWS_OFF, // previews_state | |
| 89 std::string(), // original_headers | |
| 90 nullptr, // body | |
| 91 false); // initiated_in_secure_context | |
| 92 info->AssociateWithRequest(request_.get()); | |
| 93 std::string method = "GET"; | |
| 94 GURL url("url"); | |
| 95 request_->net_log().BeginEvent( | |
| 96 net::NetLogEventType::URL_REQUEST_START_JOB, | |
| 97 base::Bind(&net::NetLogURLRequestStartCallback, &url, &method, 0, -1)); | |
| 98 } | |
| 99 | |
| 100 void TearDown() override { NetLogObserver::Detach(); } | |
| 101 | |
| 102 void VerifyHeaderValue(const std::string& header, const std::string& value) { | |
|
Charlie Harrison
2017/02/27 21:54:44
nit: expected_value?
RyanSturm
2017/02/27 22:13:08
Done.
| |
| 103 scoped_refptr<ResourceResponse> response(new ResourceResponse); | |
| 104 | |
| 105 NetLogObserver::PopulateResponseInfo(request_.get(), response.get()); | |
| 106 | |
| 107 EXPECT_EQ(header, response->head.devtools_info->request_headers[0].first); | |
|
Charlie Harrison
2017/02/27 21:54:44
Maybe iterate through the headers so we can suppor
RyanSturm
2017/02/27 22:13:08
Done.
| |
| 108 EXPECT_EQ(value, response->head.devtools_info->request_headers[0].second); | |
| 109 } | |
| 110 | |
| 111 protected: | |
| 112 net::NetLog net_log_; | |
| 113 TestBrowserThreadBundle thread_bundle_; | |
| 114 net::TestURLRequestContext context_; | |
| 115 std::unique_ptr<MockResourceContext> resource_context_; | |
| 116 scoped_refptr<ResourceRequesterInfo> requester_info_; | |
| 117 std::unique_ptr<net::URLRequest> request_; | |
| 118 | |
| 119 private: | |
| 120 DISALLOW_COPY_AND_ASSIGN(NetLogObserverTest); | |
| 121 }; | |
| 122 | |
| 123 TEST_F(NetLogObserverTest, TestHTTPEntry) { | |
| 124 std::string header("header"); | |
| 125 std::string value("value"); | |
| 126 std::string request_line("HTTP request line"); | |
| 127 | |
| 128 net::HttpRequestHeaders request_headers; | |
| 129 request_headers.SetHeader(header, value); | |
| 130 | |
| 131 request_->net_log().AddEvent( | |
| 132 net::NetLogEventType::HTTP_TRANSACTION_SEND_REQUEST_HEADERS, | |
| 133 base::Bind(&net::HttpRequestHeaders::NetLogCallback, | |
| 134 base::Unretained(&request_headers), &request_line)); | |
| 135 | |
| 136 VerifyHeaderValue(header, value); | |
| 137 } | |
| 138 | |
| 139 TEST_F(NetLogObserverTest, TestHTTP2Entry) { | |
| 140 std::string header("header"); | |
| 141 std::string value("value"); | |
| 142 net::SpdyHeaderBlock request_headers; | |
| 143 | |
| 144 request_headers[header] = value; | |
| 145 request_->net_log().AddEvent( | |
| 146 net::NetLogEventType::HTTP_TRANSACTION_HTTP2_SEND_REQUEST_HEADERS, | |
| 147 base::Bind(&net::SpdyHeaderBlockNetLogCallback, &request_headers)); | |
| 148 | |
| 149 VerifyHeaderValue(header, value); | |
| 150 } | |
| 151 | |
| 152 TEST_F(NetLogObserverTest, TestQUICEntry) { | |
| 153 std::string header("header"); | |
| 154 std::string value("value"); | |
| 155 net::SpdyHeaderBlock request_headers; | |
| 156 | |
| 157 request_headers[header] = value; | |
| 158 request_->net_log().AddEvent( | |
| 159 net::NetLogEventType::HTTP_TRANSACTION_QUIC_SEND_REQUEST_HEADERS, | |
| 160 base::Bind(&QuicRequestCallback, 1, &request_headers, | |
| 161 net::DEFAULT_PRIORITY)); | |
| 162 | |
| 163 VerifyHeaderValue(header, value); | |
| 164 } | |
| 165 | |
| 166 } // namespace content | |
| OLD | NEW |