| 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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 } | 70 } |
| 71 | 71 |
| 72 private: | 72 private: |
| 73 content::TestBrowserThreadBundle thread_bundle_; | 73 content::TestBrowserThreadBundle thread_bundle_; |
| 74 ChromeDataUseAscriber ascriber_; | 74 ChromeDataUseAscriber ascriber_; |
| 75 net::TestURLRequestContext context_; | 75 net::TestURLRequestContext context_; |
| 76 std::unique_ptr<content::MockResourceContext> resource_context_; | 76 std::unique_ptr<content::MockResourceContext> resource_context_; |
| 77 }; | 77 }; |
| 78 | 78 |
| 79 TEST_F(ChromeDataUseAscriberTest, NoRecorderWithoutFrame) { | 79 TEST_F(ChromeDataUseAscriberTest, NoRecorderWithoutFrame) { |
| 80 if (content::IsBrowserSideNavigationEnabled()) | |
| 81 return; | |
| 82 | |
| 83 std::unique_ptr<net::URLRequest> request = CreateNewRequest( | 80 std::unique_ptr<net::URLRequest> request = CreateNewRequest( |
| 84 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); | 81 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); |
| 85 | 82 |
| 86 // Main frame request should not cause a recorder to be created, since the | 83 // Main frame request causes a recorder to be created. |
| 87 // frame does not exist. | |
| 88 ascriber()->OnBeforeUrlRequest(request.get()); | 84 ascriber()->OnBeforeUrlRequest(request.get()); |
| 89 EXPECT_EQ(0u, recorders().size()); | 85 EXPECT_EQ(1u, recorders().size()); |
| 90 | 86 |
| 91 // Frame is created. | 87 // Frame is created. |
| 92 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); | 88 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); |
| 93 EXPECT_EQ(1u, recorders().size()); | 89 EXPECT_EQ(2u, recorders().size()); |
| 94 | 90 |
| 95 // Request should cause a recorder to be created. | 91 // Same mainframe request should not cause another recorder to be created. |
| 96 ascriber()->OnBeforeUrlRequest(request.get()); | 92 ascriber()->OnBeforeUrlRequest(request.get()); |
| 97 EXPECT_EQ(2u, recorders().size()); | 93 EXPECT_EQ(2u, recorders().size()); |
| 98 | 94 |
| 99 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); | 95 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); |
| 96 ascriber()->OnUrlRequestDestroyed(request.get()); |
| 97 |
| 98 EXPECT_EQ(1u, recorders().size()); |
| 100 } | 99 } |
| 101 | 100 |
| 102 TEST_F(ChromeDataUseAscriberTest, RenderFrameShownAndHidden) { | 101 TEST_F(ChromeDataUseAscriberTest, RenderFrameShownAndHidden) { |
| 103 if (content::IsBrowserSideNavigationEnabled()) | |
| 104 return; | |
| 105 | |
| 106 std::unique_ptr<net::URLRequest> request = CreateNewRequest( | 102 std::unique_ptr<net::URLRequest> request = CreateNewRequest( |
| 107 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); | 103 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); |
| 108 | 104 |
| 109 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); | 105 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); |
| 110 ascriber()->OnBeforeUrlRequest(request.get()); | 106 ascriber()->OnBeforeUrlRequest(request.get()); |
| 111 ascriber()->ReadyToCommitMainFrameNavigation( | 107 ascriber()->ReadyToCommitMainFrameNavigation( |
| 112 GURL("http://test.com"), content::GlobalRequestID(kRenderProcessId, 0), | 108 GURL("http://test.com"), content::GlobalRequestID(kRenderProcessId, 0), |
| 113 kRenderProcessId, kRenderFrameId, true, (void*)request.get()); | 109 kRenderProcessId, kRenderFrameId, true, (void*)request.get()); |
| 114 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true); | 110 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true); |
| 115 | 111 |
| 116 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible()); | 112 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible()); |
| 117 | 113 |
| 118 // Hide the frame, and the visibility should be updated. | 114 // Hide the frame, and the visibility should be updated. |
| 119 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, false); | 115 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, false); |
| 120 EXPECT_FALSE(ascriber()->GetDataUseRecorder(*request)->is_visible()); | 116 EXPECT_FALSE(ascriber()->GetDataUseRecorder(*request)->is_visible()); |
| 121 | 117 |
| 122 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); | 118 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); |
| 123 } | 119 } |
| 124 | 120 |
| 125 TEST_F(ChromeDataUseAscriberTest, RenderFrameHiddenAndShown) { | 121 TEST_F(ChromeDataUseAscriberTest, RenderFrameHiddenAndShown) { |
| 126 if (content::IsBrowserSideNavigationEnabled()) | |
| 127 return; | |
| 128 | |
| 129 std::unique_ptr<net::URLRequest> request = CreateNewRequest( | 122 std::unique_ptr<net::URLRequest> request = CreateNewRequest( |
| 130 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); | 123 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); |
| 131 | 124 |
| 132 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); | 125 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); |
| 133 ascriber()->OnBeforeUrlRequest(request.get()); | 126 ascriber()->OnBeforeUrlRequest(request.get()); |
| 134 ascriber()->ReadyToCommitMainFrameNavigation( | 127 ascriber()->ReadyToCommitMainFrameNavigation( |
| 135 GURL("http://test.com"), content::GlobalRequestID(kRenderProcessId, 0), | 128 GURL("http://test.com"), content::GlobalRequestID(kRenderProcessId, 0), |
| 136 kRenderProcessId, kRenderFrameId, true, (void*)request.get()); | 129 kRenderProcessId, kRenderFrameId, true, (void*)request.get()); |
| 137 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, false); | 130 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, false); |
| 138 | 131 |
| 139 EXPECT_FALSE(ascriber()->GetDataUseRecorder(*request)->is_visible()); | 132 EXPECT_FALSE(ascriber()->GetDataUseRecorder(*request)->is_visible()); |
| 140 | 133 |
| 141 // Show the frame, and the visibility should be updated. | 134 // Show the frame, and the visibility should be updated. |
| 142 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true); | 135 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true); |
| 143 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible()); | 136 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible()); |
| 144 | 137 |
| 145 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); | 138 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); |
| 146 } | 139 } |
| 147 | 140 |
| 148 TEST_F(ChromeDataUseAscriberTest, RenderFrameHostChanged) { | 141 TEST_F(ChromeDataUseAscriberTest, RenderFrameHostChanged) { |
| 149 if (content::IsBrowserSideNavigationEnabled()) | |
| 150 return; | |
| 151 | |
| 152 std::unique_ptr<net::URLRequest> request = CreateNewRequest( | 142 std::unique_ptr<net::URLRequest> request = CreateNewRequest( |
| 153 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); | 143 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); |
| 154 | 144 |
| 155 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); | 145 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); |
| 156 ascriber()->OnBeforeUrlRequest(request.get()); | 146 ascriber()->OnBeforeUrlRequest(request.get()); |
| 157 ascriber()->ReadyToCommitMainFrameNavigation( | 147 ascriber()->ReadyToCommitMainFrameNavigation( |
| 158 GURL("http://test.com"), content::GlobalRequestID(kRenderProcessId, 0), | 148 GURL("http://test.com"), content::GlobalRequestID(kRenderProcessId, 0), |
| 159 kRenderProcessId, kRenderFrameId, true, (void*)request.get()); | 149 kRenderProcessId, kRenderFrameId, true, (void*)request.get()); |
| 160 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true); | 150 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true); |
| 161 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible()); | 151 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible()); |
| 162 | 152 |
| 163 // Create a new render frame and swap it. | 153 // Create a new render frame and swap it. |
| 164 ascriber()->RenderFrameCreated(kRenderProcessId + 1, kRenderFrameId + 1, -1, | 154 ascriber()->RenderFrameCreated(kRenderProcessId + 1, kRenderFrameId + 1, -1, |
| 165 -1); | 155 -1); |
| 166 ascriber()->RenderFrameHostChanged(kRenderProcessId, kRenderFrameId, | 156 ascriber()->RenderFrameHostChanged(kRenderProcessId, kRenderFrameId, |
| 167 kRenderProcessId + 1, kRenderFrameId + 1); | 157 kRenderProcessId + 1, kRenderFrameId + 1); |
| 168 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); | 158 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); |
| 169 | 159 |
| 170 ascriber()->WasShownOrHidden(kRenderProcessId + 1, kRenderFrameId + 1, true); | 160 ascriber()->WasShownOrHidden(kRenderProcessId + 1, kRenderFrameId + 1, true); |
| 171 ascriber()->RenderFrameDeleted(kRenderProcessId + 1, kRenderFrameId + 1, -1, | 161 ascriber()->RenderFrameDeleted(kRenderProcessId + 1, kRenderFrameId + 1, -1, |
| 172 -1); | 162 -1); |
| 173 } | 163 } |
| 174 | 164 |
| 175 TEST_F(ChromeDataUseAscriberTest, MainFrameNavigation) { | 165 TEST_F(ChromeDataUseAscriberTest, MainFrameNavigation) { |
| 176 if (content::IsBrowserSideNavigationEnabled()) | |
| 177 return; | |
| 178 | |
| 179 std::unique_ptr<net::URLRequest> request = CreateNewRequest( | 166 std::unique_ptr<net::URLRequest> request = CreateNewRequest( |
| 180 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); | 167 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); |
| 181 | 168 |
| 182 // Mainframe is created. | 169 // Mainframe is created. |
| 183 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); | 170 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); |
| 184 EXPECT_EQ(1u, recorders().size()); | 171 EXPECT_EQ(1u, recorders().size()); |
| 185 | 172 |
| 186 // Request should cause a recorder to be created. | 173 // Request should cause a recorder to be created. |
| 187 ascriber()->OnBeforeUrlRequest(request.get()); | 174 ascriber()->OnBeforeUrlRequest(request.get()); |
| 188 EXPECT_EQ(2u, recorders().size()); | 175 EXPECT_EQ(2u, recorders().size()); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 208 EXPECT_EQ(DataUse::TrafficType::USER_TRAFFIC, | 195 EXPECT_EQ(DataUse::TrafficType::USER_TRAFFIC, |
| 209 recorder_entry.data_use().traffic_type()); | 196 recorder_entry.data_use().traffic_type()); |
| 210 | 197 |
| 211 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); | 198 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); |
| 212 ascriber()->OnUrlRequestDestroyed(request.get()); | 199 ascriber()->OnUrlRequestDestroyed(request.get()); |
| 213 | 200 |
| 214 EXPECT_EQ(0u, recorders().size()); | 201 EXPECT_EQ(0u, recorders().size()); |
| 215 } | 202 } |
| 216 | 203 |
| 217 TEST_F(ChromeDataUseAscriberTest, FailedMainFrameNavigation) { | 204 TEST_F(ChromeDataUseAscriberTest, FailedMainFrameNavigation) { |
| 218 if (content::IsBrowserSideNavigationEnabled()) | |
| 219 return; | |
| 220 | |
| 221 std::unique_ptr<net::URLRequest> request = CreateNewRequest( | 205 std::unique_ptr<net::URLRequest> request = CreateNewRequest( |
| 222 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); | 206 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); |
| 223 | 207 |
| 224 // Mainframe is created. | 208 // Mainframe is created. |
| 225 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); | 209 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); |
| 226 EXPECT_EQ(1u, recorders().size()); | 210 EXPECT_EQ(1u, recorders().size()); |
| 227 | 211 |
| 228 // Request should cause a recorder to be created. | 212 // Request should cause a recorder to be created. |
| 229 ascriber()->OnBeforeUrlRequest(request.get()); | 213 ascriber()->OnBeforeUrlRequest(request.get()); |
| 230 EXPECT_EQ(2u, recorders().size()); | 214 EXPECT_EQ(2u, recorders().size()); |
| 231 | 215 |
| 232 // Failed request will remove the pending entry. | 216 // Failed request will remove the pending entry. |
| 233 request->Cancel(); | 217 request->Cancel(); |
| 234 ascriber()->OnUrlRequestCompleted(*request, false); | 218 ascriber()->OnUrlRequestCompleted(*request, false); |
| 235 | 219 |
| 236 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); | 220 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); |
| 237 ascriber()->OnUrlRequestDestroyed(request.get()); | 221 ascriber()->OnUrlRequestDestroyed(request.get()); |
| 238 | 222 |
| 239 EXPECT_EQ(0u, recorders().size()); | 223 EXPECT_EQ(0u, recorders().size()); |
| 240 } | 224 } |
| 241 | 225 |
| 242 } // namespace data_use_measurement | 226 } // namespace data_use_measurement |
| OLD | NEW |