| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/data_use_measurement/chrome_data_use_ascriber.h" | 5 #include "chrome/browser/data_use_measurement/chrome_data_use_ascriber.h" |
| 6 | 6 |
| 7 #include <list> | 7 #include <list> |
| 8 #include <memory> | 8 #include <memory> |
| 9 | 9 |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 } | 85 } |
| 86 | 86 |
| 87 private: | 87 private: |
| 88 content::TestBrowserThreadBundle thread_bundle_; | 88 content::TestBrowserThreadBundle thread_bundle_; |
| 89 ChromeDataUseAscriber ascriber_; | 89 ChromeDataUseAscriber ascriber_; |
| 90 net::TestURLRequestContext context_; | 90 net::TestURLRequestContext context_; |
| 91 std::unique_ptr<content::MockResourceContext> resource_context_; | 91 std::unique_ptr<content::MockResourceContext> resource_context_; |
| 92 }; | 92 }; |
| 93 | 93 |
| 94 TEST_F(ChromeDataUseAscriberTest, NoRecorderWithoutFrame) { | 94 TEST_F(ChromeDataUseAscriberTest, NoRecorderWithoutFrame) { |
| 95 if (content::IsBrowserSideNavigationEnabled()) | |
| 96 return; | |
| 97 | |
| 98 std::unique_ptr<net::URLRequest> request = CreateNewRequest( | 95 std::unique_ptr<net::URLRequest> request = CreateNewRequest( |
| 99 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); | 96 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); |
| 100 | 97 |
| 101 // Main frame request should not cause a recorder to be created, since the | 98 // Main frame request causes a recorder to be created. |
| 102 // frame does not exist. | |
| 103 ascriber()->OnBeforeUrlRequest(request.get()); | 99 ascriber()->OnBeforeUrlRequest(request.get()); |
| 104 EXPECT_EQ(0u, recorders().size()); | 100 EXPECT_EQ(1u, recorders().size()); |
| 105 | 101 |
| 106 // Frame is created. | 102 // Frame is created. |
| 107 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); | 103 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); |
| 108 EXPECT_EQ(1u, recorders().size()); | 104 EXPECT_EQ(2u, recorders().size()); |
| 109 | 105 |
| 110 // Request should cause a recorder to be created. | 106 // Same mainframe request should not cause another recorder to be created. |
| 111 ascriber()->OnBeforeUrlRequest(request.get()); | 107 ascriber()->OnBeforeUrlRequest(request.get()); |
| 112 EXPECT_EQ(2u, recorders().size()); | 108 EXPECT_EQ(2u, recorders().size()); |
| 113 | 109 |
| 114 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); | 110 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); |
| 111 ascriber()->OnUrlRequestDestroyed(request.get()); |
| 112 |
| 113 EXPECT_EQ(1u, recorders().size()); |
| 115 } | 114 } |
| 116 | 115 |
| 117 TEST_F(ChromeDataUseAscriberTest, RenderFrameShownAndHidden) { | 116 TEST_F(ChromeDataUseAscriberTest, RenderFrameShownAndHidden) { |
| 118 if (content::IsBrowserSideNavigationEnabled()) | |
| 119 return; | |
| 120 | |
| 121 std::unique_ptr<net::URLRequest> request = CreateNewRequest( | 117 std::unique_ptr<net::URLRequest> request = CreateNewRequest( |
| 122 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); | 118 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); |
| 123 | 119 |
| 124 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); | 120 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); |
| 125 ascriber()->OnBeforeUrlRequest(request.get()); | 121 ascriber()->OnBeforeUrlRequest(request.get()); |
| 126 ascriber()->ReadyToCommitMainFrameNavigation( | 122 ascriber()->ReadyToCommitMainFrameNavigation( |
| 127 content::GlobalRequestID(kRenderProcessId, 0), kRenderProcessId, | 123 content::GlobalRequestID(kRenderProcessId, 0), kRenderProcessId, |
| 128 kRenderFrameId); | 124 kRenderFrameId); |
| 129 ascriber()->DidFinishNavigation(kRenderProcessId, kRenderFrameId, | 125 ascriber()->DidFinishNavigation(kRenderProcessId, kRenderFrameId, |
| 130 GURL("http://test.com"), true, | 126 GURL("http://test.com"), true, |
| 131 kPageTransition); | 127 kPageTransition); |
| 132 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true); | 128 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true); |
| 133 | 129 |
| 134 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible()); | 130 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible()); |
| 135 | 131 |
| 136 // Hide the frame, and the visibility should be updated. | 132 // Hide the frame, and the visibility should be updated. |
| 137 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, false); | 133 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, false); |
| 138 EXPECT_FALSE(ascriber()->GetDataUseRecorder(*request)->is_visible()); | 134 EXPECT_FALSE(ascriber()->GetDataUseRecorder(*request)->is_visible()); |
| 139 | 135 |
| 140 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); | 136 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); |
| 141 } | 137 } |
| 142 | 138 |
| 143 TEST_F(ChromeDataUseAscriberTest, RenderFrameHiddenAndShown) { | 139 TEST_F(ChromeDataUseAscriberTest, RenderFrameHiddenAndShown) { |
| 144 if (content::IsBrowserSideNavigationEnabled()) | |
| 145 return; | |
| 146 | |
| 147 std::unique_ptr<net::URLRequest> request = CreateNewRequest( | 140 std::unique_ptr<net::URLRequest> request = CreateNewRequest( |
| 148 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); | 141 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); |
| 149 | 142 |
| 150 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); | 143 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); |
| 151 ascriber()->OnBeforeUrlRequest(request.get()); | 144 ascriber()->OnBeforeUrlRequest(request.get()); |
| 152 ascriber()->ReadyToCommitMainFrameNavigation( | 145 ascriber()->ReadyToCommitMainFrameNavigation( |
| 153 content::GlobalRequestID(kRenderProcessId, 0), kRenderProcessId, | 146 content::GlobalRequestID(kRenderProcessId, 0), kRenderProcessId, |
| 154 kRenderFrameId); | 147 kRenderFrameId); |
| 155 ascriber()->DidFinishNavigation(kRenderProcessId, kRenderFrameId, | 148 ascriber()->DidFinishNavigation(kRenderProcessId, kRenderFrameId, |
| 156 GURL("http://test.com"), true, | 149 GURL("http://test.com"), true, |
| 157 kPageTransition); | 150 kPageTransition); |
| 158 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, false); | 151 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, false); |
| 159 | 152 |
| 160 EXPECT_FALSE(ascriber()->GetDataUseRecorder(*request)->is_visible()); | 153 EXPECT_FALSE(ascriber()->GetDataUseRecorder(*request)->is_visible()); |
| 161 | 154 |
| 162 // Show the frame, and the visibility should be updated. | 155 // Show the frame, and the visibility should be updated. |
| 163 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true); | 156 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true); |
| 164 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible()); | 157 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible()); |
| 165 | 158 |
| 166 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); | 159 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); |
| 167 } | 160 } |
| 168 | 161 |
| 169 TEST_F(ChromeDataUseAscriberTest, RenderFrameHostChanged) { | 162 TEST_F(ChromeDataUseAscriberTest, RenderFrameHostChanged) { |
| 170 if (content::IsBrowserSideNavigationEnabled()) | |
| 171 return; | |
| 172 | |
| 173 std::unique_ptr<net::URLRequest> request = CreateNewRequest( | 163 std::unique_ptr<net::URLRequest> request = CreateNewRequest( |
| 174 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); | 164 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); |
| 175 | 165 |
| 176 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); | 166 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); |
| 177 ascriber()->OnBeforeUrlRequest(request.get()); | 167 ascriber()->OnBeforeUrlRequest(request.get()); |
| 178 ascriber()->ReadyToCommitMainFrameNavigation( | 168 ascriber()->ReadyToCommitMainFrameNavigation( |
| 179 content::GlobalRequestID(kRenderProcessId, 0), kRenderProcessId, | 169 content::GlobalRequestID(kRenderProcessId, 0), kRenderProcessId, |
| 180 kRenderFrameId); | 170 kRenderFrameId); |
| 181 ascriber()->DidFinishNavigation(kRenderProcessId, kRenderFrameId, | 171 ascriber()->DidFinishNavigation(kRenderProcessId, kRenderFrameId, |
| 182 GURL("http://test.com"), true, | 172 GURL("http://test.com"), true, |
| 183 kPageTransition); | 173 kPageTransition); |
| 184 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true); | 174 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true); |
| 185 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible()); | 175 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible()); |
| 186 | 176 |
| 187 // Create a new render frame and swap it. | 177 // Create a new render frame and swap it. |
| 188 ascriber()->RenderFrameCreated(kRenderProcessId + 1, kRenderFrameId + 1, -1, | 178 ascriber()->RenderFrameCreated(kRenderProcessId + 1, kRenderFrameId + 1, -1, |
| 189 -1); | 179 -1); |
| 190 ascriber()->RenderFrameHostChanged(kRenderProcessId, kRenderFrameId, | 180 ascriber()->RenderFrameHostChanged(kRenderProcessId, kRenderFrameId, |
| 191 kRenderProcessId + 1, kRenderFrameId + 1); | 181 kRenderProcessId + 1, kRenderFrameId + 1); |
| 192 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); | 182 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); |
| 193 | 183 |
| 194 ascriber()->WasShownOrHidden(kRenderProcessId + 1, kRenderFrameId + 1, true); | 184 ascriber()->WasShownOrHidden(kRenderProcessId + 1, kRenderFrameId + 1, true); |
| 195 ascriber()->RenderFrameDeleted(kRenderProcessId + 1, kRenderFrameId + 1, -1, | 185 ascriber()->RenderFrameDeleted(kRenderProcessId + 1, kRenderFrameId + 1, -1, |
| 196 -1); | 186 -1); |
| 197 } | 187 } |
| 198 | 188 |
| 199 TEST_F(ChromeDataUseAscriberTest, MainFrameNavigation) { | 189 TEST_F(ChromeDataUseAscriberTest, MainFrameNavigation) { |
| 200 if (content::IsBrowserSideNavigationEnabled()) | |
| 201 return; | |
| 202 | |
| 203 std::unique_ptr<net::URLRequest> request = CreateNewRequest( | 190 std::unique_ptr<net::URLRequest> request = CreateNewRequest( |
| 204 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); | 191 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); |
| 205 | 192 |
| 206 // Mainframe is created. | 193 // Mainframe is created. |
| 207 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); | 194 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); |
| 208 EXPECT_EQ(1u, recorders().size()); | 195 EXPECT_EQ(1u, recorders().size()); |
| 209 | 196 |
| 210 // Request should cause a recorder to be created. | 197 // Request should cause a recorder to be created. |
| 211 ascriber()->OnBeforeUrlRequest(request.get()); | 198 ascriber()->OnBeforeUrlRequest(request.get()); |
| 212 EXPECT_EQ(2u, recorders().size()); | 199 EXPECT_EQ(2u, recorders().size()); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 234 EXPECT_EQ(DataUse::TrafficType::USER_TRAFFIC, | 221 EXPECT_EQ(DataUse::TrafficType::USER_TRAFFIC, |
| 235 recorder_entry.data_use().traffic_type()); | 222 recorder_entry.data_use().traffic_type()); |
| 236 | 223 |
| 237 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); | 224 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); |
| 238 ascriber()->OnUrlRequestDestroyed(request.get()); | 225 ascriber()->OnUrlRequestDestroyed(request.get()); |
| 239 | 226 |
| 240 EXPECT_EQ(0u, recorders().size()); | 227 EXPECT_EQ(0u, recorders().size()); |
| 241 } | 228 } |
| 242 | 229 |
| 243 TEST_F(ChromeDataUseAscriberTest, FailedMainFrameNavigation) { | 230 TEST_F(ChromeDataUseAscriberTest, FailedMainFrameNavigation) { |
| 244 if (content::IsBrowserSideNavigationEnabled()) | |
| 245 return; | |
| 246 | |
| 247 std::unique_ptr<net::URLRequest> request = CreateNewRequest( | 231 std::unique_ptr<net::URLRequest> request = CreateNewRequest( |
| 248 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); | 232 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); |
| 249 | 233 |
| 250 // Mainframe is created. | 234 // Mainframe is created. |
| 251 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); | 235 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); |
| 252 EXPECT_EQ(1u, recorders().size()); | 236 EXPECT_EQ(1u, recorders().size()); |
| 253 | 237 |
| 254 // Request should cause a recorder to be created. | 238 // Request should cause a recorder to be created. |
| 255 ascriber()->OnBeforeUrlRequest(request.get()); | 239 ascriber()->OnBeforeUrlRequest(request.get()); |
| 256 EXPECT_EQ(2u, recorders().size()); | 240 EXPECT_EQ(2u, recorders().size()); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 EXPECT_CALL(mock_observer, OnPageLoadComplete(&recorder_entry.data_use())) | 299 EXPECT_CALL(mock_observer, OnPageLoadComplete(&recorder_entry.data_use())) |
| 316 .Times(1); | 300 .Times(1); |
| 317 | 301 |
| 318 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); | 302 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); |
| 319 ascriber()->OnUrlRequestDestroyed(request.get()); | 303 ascriber()->OnUrlRequestDestroyed(request.get()); |
| 320 | 304 |
| 321 EXPECT_EQ(0u, recorders().size()); | 305 EXPECT_EQ(0u, recorders().size()); |
| 322 } | 306 } |
| 323 | 307 |
| 324 } // namespace data_use_measurement | 308 } // namespace data_use_measurement |
| OLD | NEW |