Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Side by Side Diff: extensions/browser/load_monitoring_extension_host_queue_unittest.cc

Issue 995983002: Make LoadMonitoringExtensionHostQueue remove itself as an ExtensionHost observer at the correct tim… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: roll back some stuff Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « extensions/browser/load_monitoring_extension_host_queue.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 <limits> 5 #include <limits>
6 6
7 #include "base/run_loop.h" 7 #include "base/run_loop.h"
8 #include "content/public/test/test_browser_thread_bundle.h" 8 #include "content/public/test/test_browser_thread_bundle.h"
9 #include "extensions/browser/deferred_start_render_host.h" 9 #include "extensions/browser/deferred_start_render_host.h"
10 #include "extensions/browser/extensions_test.h" 10 #include "extensions/browser/extensions_test.h"
11 #include "extensions/browser/load_monitoring_extension_host_queue.h" 11 #include "extensions/browser/load_monitoring_extension_host_queue.h"
12 #include "extensions/browser/serial_extension_host_queue.h" 12 #include "extensions/browser/serial_extension_host_queue.h"
13 13
14 namespace extensions { 14 namespace extensions {
15 15
16 namespace { 16 namespace {
17 17
18 class StubDeferredStartRenderHost : public DeferredStartRenderHost { 18 class StubDeferredStartRenderHost : public DeferredStartRenderHost {
19 public:
20 // Returns true if this host is being observed by |observer|.
21 bool IsObservedBy(DeferredStartRenderHostObserver* observer) {
22 return observers_.count(observer) > 0;
23 }
24
19 private: 25 private:
26 // DeferredStartRenderHost:
20 void AddDeferredStartRenderHostObserver( 27 void AddDeferredStartRenderHostObserver(
21 DeferredStartRenderHostObserver* observer) override {} 28 DeferredStartRenderHostObserver* observer) override {
29 observers_.insert(observer);
30 }
22 void RemoveDeferredStartRenderHostObserver( 31 void RemoveDeferredStartRenderHostObserver(
23 DeferredStartRenderHostObserver* observer) override {} 32 DeferredStartRenderHostObserver* observer) override {
33 observers_.erase(observer);
34 }
24 void CreateRenderViewNow() override {} 35 void CreateRenderViewNow() override {}
36
37 std::set<DeferredStartRenderHostObserver*> observers_;
25 }; 38 };
26 39
27 const size_t g_invalid_size_t = std::numeric_limits<size_t>::max(); 40 const size_t g_invalid_size_t = std::numeric_limits<size_t>::max();
28 41
29 } // namespace 42 } // namespace
30 43
31 class LoadMonitoringExtensionHostQueueTest : public ExtensionsTest { 44 class LoadMonitoringExtensionHostQueueTest : public ExtensionsTest {
32 public: 45 public:
33 LoadMonitoringExtensionHostQueueTest() 46 LoadMonitoringExtensionHostQueueTest()
34 : finished_(false), 47 : finished_(false),
35 // Arbitrary choice of an invalid size_t. 48 // Arbitrary choice of an invalid size_t.
36 num_queued_(g_invalid_size_t), 49 num_queued_(g_invalid_size_t),
37 num_loaded_(g_invalid_size_t), 50 num_loaded_(g_invalid_size_t),
38 max_in_queue_(g_invalid_size_t), 51 max_awaiting_loading_(g_invalid_size_t),
39 max_active_loading_(g_invalid_size_t) {} 52 max_active_loading_(g_invalid_size_t) {}
40 53
41 void SetUp() override { 54 void SetUp() override {
42 queue_.reset(new LoadMonitoringExtensionHostQueue( 55 queue_.reset(new LoadMonitoringExtensionHostQueue(
43 // Use a SerialExtensionHostQueue because it's simple. 56 // Use a SerialExtensionHostQueue because it's simple.
44 scoped_ptr<ExtensionHostQueue>(new SerialExtensionHostQueue()), 57 scoped_ptr<ExtensionHostQueue>(new SerialExtensionHostQueue()),
45 base::TimeDelta(), // no delay, easier to test 58 base::TimeDelta(), // no delay, easier to test
46 base::Bind(&LoadMonitoringExtensionHostQueueTest::Finished, 59 base::Bind(&LoadMonitoringExtensionHostQueueTest::Finished,
47 base::Unretained(this)))); 60 base::Unretained(this))));
48 } 61 }
49 62
50 protected: 63 protected:
51 // Creates a new DeferredStartRenderHost. Ownership is held by this class, 64 // Creates a new DeferredStartRenderHost. Ownership is held by this class,
52 // not passed to caller. 65 // not passed to caller.
53 DeferredStartRenderHost* CreateHost() { 66 StubDeferredStartRenderHost* CreateHost() {
54 StubDeferredStartRenderHost* stub = new StubDeferredStartRenderHost(); 67 StubDeferredStartRenderHost* stub = new StubDeferredStartRenderHost();
55 stubs_.push_back(stub); 68 stubs_.push_back(stub);
56 return stub; 69 return stub;
57 } 70 }
58 71
59 // Our single LoadMonitoringExtensionHostQueue instance. 72 // Our single LoadMonitoringExtensionHostQueue instance.
60 LoadMonitoringExtensionHostQueue* queue() { return queue_.get(); } 73 LoadMonitoringExtensionHostQueue* queue() { return queue_.get(); }
61 74
62 // Returns true if the queue has finished monitoring. 75 // Returns true if the queue has finished monitoring.
63 bool finished() { return finished_; } 76 bool finished() const { return finished_; }
64 77
65 // These are available after the queue has finished (in which case finished() 78 // These are available after the queue has finished (in which case finished()
66 // will return true). 79 // will return true).
67 size_t num_queued() { return num_queued_; } 80 size_t num_queued() { return num_queued_; }
68 size_t num_loaded() { return num_loaded_; } 81 size_t num_loaded() { return num_loaded_; }
69 size_t max_in_queue() { return max_in_queue_; } 82 size_t max_awaiting_loading() { return max_awaiting_loading_; }
70 size_t max_active_loading() { return max_active_loading_; } 83 size_t max_active_loading() { return max_active_loading_; }
71 84
72 private: 85 private:
73 // Callback when queue has finished monitoring. 86 // Callback when queue has finished monitoring.
74 void Finished(size_t num_queued, 87 void Finished(size_t num_queued,
75 size_t num_loaded, 88 size_t num_loaded,
76 size_t max_in_queue, 89 size_t max_awaiting_loading,
77 size_t max_active_loading) { 90 size_t max_active_loading) {
91 CHECK(!finished_);
78 finished_ = true; 92 finished_ = true;
79 num_queued_ = num_queued; 93 num_queued_ = num_queued;
80 num_loaded_ = num_loaded; 94 num_loaded_ = num_loaded;
81 max_in_queue_ = max_in_queue; 95 max_awaiting_loading_ = max_awaiting_loading;
82 max_active_loading_ = max_active_loading; 96 max_active_loading_ = max_active_loading;
83 } 97 }
84 98
85 content::TestBrowserThreadBundle thread_bundle_; 99 content::TestBrowserThreadBundle thread_bundle_;
86 scoped_ptr<LoadMonitoringExtensionHostQueue> queue_; 100 scoped_ptr<LoadMonitoringExtensionHostQueue> queue_;
87 ScopedVector<StubDeferredStartRenderHost> stubs_; 101 ScopedVector<StubDeferredStartRenderHost> stubs_;
88 102
89 // Set after the queue has finished monitoring. 103 // Set after the queue has finished monitoring.
90 bool finished_; 104 bool finished_;
91 size_t num_queued_; 105 size_t num_queued_;
92 size_t num_loaded_; 106 size_t num_loaded_;
93 size_t max_in_queue_; 107 size_t max_awaiting_loading_;
94 size_t max_active_loading_; 108 size_t max_active_loading_;
95 }; 109 };
96 110
97 // Tests that if monitoring is never started, nor any hosts added, nothing is 111 // Tests that if monitoring is never started, nor any hosts added, nothing is
98 // recorded. 112 // recorded.
99 TEST_F(LoadMonitoringExtensionHostQueueTest, NeverStarted) { 113 TEST_F(LoadMonitoringExtensionHostQueueTest, NeverStarted) {
100 base::RunLoop().RunUntilIdle(); 114 base::RunLoop().RunUntilIdle();
101 ASSERT_FALSE(finished()); 115 ASSERT_FALSE(finished());
102 } 116 }
103 117
104 // Tests that if monitoring has started but no hosts added, it's recorded as 0. 118 // Tests that if monitoring has started but no hosts added, it's recorded as 0.
105 TEST_F(LoadMonitoringExtensionHostQueueTest, NoHosts) { 119 TEST_F(LoadMonitoringExtensionHostQueueTest, NoHosts) {
106 queue()->StartMonitoring(); 120 queue()->StartMonitoring();
107 121
108 base::RunLoop().RunUntilIdle(); 122 base::RunLoop().RunUntilIdle();
109 ASSERT_TRUE(finished()); 123 ASSERT_TRUE(finished());
110 EXPECT_EQ(0u, num_queued()); 124 EXPECT_EQ(0u, num_queued());
111 EXPECT_EQ(0u, num_loaded()); 125 EXPECT_EQ(0u, num_loaded());
112 EXPECT_EQ(0u, max_in_queue()); 126 EXPECT_EQ(0u, max_awaiting_loading());
113 EXPECT_EQ(0u, max_active_loading()); 127 EXPECT_EQ(0u, max_active_loading());
114 } 128 }
115 129
116 // Tests that adding a host starts monitoring. 130 // Tests that adding a host starts monitoring.
117 TEST_F(LoadMonitoringExtensionHostQueueTest, AddOneHost) { 131 TEST_F(LoadMonitoringExtensionHostQueueTest, AddOneHost) {
118 queue()->Add(CreateHost()); 132 queue()->Add(CreateHost());
119 133
120 base::RunLoop().RunUntilIdle(); 134 base::RunLoop().RunUntilIdle();
121 ASSERT_TRUE(finished()); 135 ASSERT_TRUE(finished());
122 EXPECT_EQ(1u, num_queued()); 136 EXPECT_EQ(1u, num_queued());
123 EXPECT_EQ(0u, num_loaded()); 137 EXPECT_EQ(0u, num_loaded());
124 EXPECT_EQ(1u, max_in_queue()); 138 EXPECT_EQ(1u, max_awaiting_loading());
125 EXPECT_EQ(0u, max_active_loading()); 139 EXPECT_EQ(0u, max_active_loading());
126 } 140 }
127 141
128 // Tests that a host added and removed is still recorded, but not as a load 142 // Tests that a host added and removed is still recorded, but not as a load
129 // finished. 143 // finished.
130 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndRemoveOneHost) { 144 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndRemoveOneHost) {
131 DeferredStartRenderHost* host = CreateHost(); 145 DeferredStartRenderHost* host = CreateHost();
132 queue()->Add(host); 146 queue()->Add(host);
133 queue()->Remove(host); 147 queue()->Remove(host);
134 148
135 base::RunLoop().RunUntilIdle(); 149 base::RunLoop().RunUntilIdle();
136 ASSERT_TRUE(finished()); 150 ASSERT_TRUE(finished());
137 EXPECT_EQ(1u, num_queued()); 151 EXPECT_EQ(1u, num_queued());
138 EXPECT_EQ(0u, num_loaded()); 152 EXPECT_EQ(0u, num_loaded());
139 EXPECT_EQ(1u, max_in_queue()); 153 EXPECT_EQ(1u, max_awaiting_loading());
140 EXPECT_EQ(0u, max_active_loading()); 154 EXPECT_EQ(0u, max_active_loading());
141 } 155 }
142 156
143 // Tests adding and starting a single host. 157 // Tests adding and starting a single host.
144 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndStartOneHost) { 158 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndStartOneHost) {
145 DeferredStartRenderHost* host = CreateHost(); 159 DeferredStartRenderHost* host = CreateHost();
146 queue()->Add(host); 160 queue()->Add(host);
147 queue()->OnDeferredStartRenderHostDidStartLoading(host); 161 queue()->OnDeferredStartRenderHostDidStartLoading(host);
148 162
149 base::RunLoop().RunUntilIdle(); 163 base::RunLoop().RunUntilIdle();
150 ASSERT_TRUE(finished()); 164 ASSERT_TRUE(finished());
151 EXPECT_EQ(1u, num_queued()); 165 EXPECT_EQ(1u, num_queued());
152 EXPECT_EQ(0u, num_loaded()); 166 EXPECT_EQ(0u, num_loaded());
153 EXPECT_EQ(1u, max_in_queue()); 167 EXPECT_EQ(1u, max_awaiting_loading());
154 EXPECT_EQ(1u, max_active_loading()); 168 EXPECT_EQ(1u, max_active_loading());
155
156 // Sanity check: stopping/destroying at this point doesn't crash.
157 queue()->OnDeferredStartRenderHostDidStopLoading(host);
158 queue()->OnDeferredStartRenderHostDestroyed(host);
159 } 169 }
160 170
161 // Tests adding and destroying a single host without starting it. 171 // Tests adding and destroying a single host without starting it.
162 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndDestroyOneHost) { 172 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndDestroyOneHost) {
163 DeferredStartRenderHost* host = CreateHost(); 173 DeferredStartRenderHost* host = CreateHost();
164 queue()->Add(host); 174 queue()->Add(host);
165 queue()->OnDeferredStartRenderHostDestroyed(host); 175 queue()->OnDeferredStartRenderHostDestroyed(host);
166 176
167 base::RunLoop().RunUntilIdle(); 177 base::RunLoop().RunUntilIdle();
168 ASSERT_TRUE(finished()); 178 ASSERT_TRUE(finished());
169 EXPECT_EQ(1u, num_queued()); 179 EXPECT_EQ(1u, num_queued());
170 EXPECT_EQ(0u, num_loaded()); 180 EXPECT_EQ(0u, num_loaded());
171 EXPECT_EQ(1u, max_in_queue()); 181 EXPECT_EQ(1u, max_awaiting_loading());
172 EXPECT_EQ(0u, max_active_loading()); 182 EXPECT_EQ(0u, max_active_loading());
173
174 // Sanity check: stopping/destroying at this point doesn't crash.
175 queue()->OnDeferredStartRenderHostDidStopLoading(host);
176 queue()->OnDeferredStartRenderHostDestroyed(host);
177 } 183 }
178 184
179 // Tests adding, starting, and stopping a single host. 185 // Tests adding, starting, and stopping a single host.
180 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndStartAndStopOneHost) { 186 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndStartAndStopOneHost) {
181 DeferredStartRenderHost* host = CreateHost(); 187 DeferredStartRenderHost* host = CreateHost();
182 queue()->Add(host); 188 queue()->Add(host);
183 queue()->OnDeferredStartRenderHostDidStartLoading(host); 189 queue()->OnDeferredStartRenderHostDidStartLoading(host);
184 queue()->OnDeferredStartRenderHostDidStopLoading(host); 190 queue()->OnDeferredStartRenderHostDidStopLoading(host);
185 191
186 base::RunLoop().RunUntilIdle(); 192 base::RunLoop().RunUntilIdle();
187 ASSERT_TRUE(finished()); 193 ASSERT_TRUE(finished());
188 EXPECT_EQ(1u, num_queued()); 194 EXPECT_EQ(1u, num_queued());
189 EXPECT_EQ(1u, num_loaded()); 195 EXPECT_EQ(1u, num_loaded());
190 EXPECT_EQ(1u, max_in_queue()); 196 EXPECT_EQ(1u, max_awaiting_loading());
191 EXPECT_EQ(1u, max_active_loading()); 197 EXPECT_EQ(1u, max_active_loading());
198 }
192 199
193 // Sanity check: destroying at this point doesn't crash. 200 // Tests adding, starting, and stopping a single host - twice.
194 queue()->OnDeferredStartRenderHostDestroyed(host); 201 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndStartAndStopOneHostTwice) {
202 DeferredStartRenderHost* host = CreateHost();
203 queue()->Add(host);
204 queue()->OnDeferredStartRenderHostDidStartLoading(host);
205 queue()->OnDeferredStartRenderHostDidStopLoading(host);
206
207 // Re-starting loading should also be recorded fine (e.g. navigations could
208 // trigger this).
209 queue()->OnDeferredStartRenderHostDidStartLoading(host);
210 queue()->OnDeferredStartRenderHostDidStopLoading(host);
211
212 base::RunLoop().RunUntilIdle();
213 ASSERT_TRUE(finished());
214 EXPECT_EQ(1u, num_queued());
215 EXPECT_EQ(2u, num_loaded()); // 2 loaded this time, because we ran twice
216 EXPECT_EQ(1u, max_awaiting_loading());
217 EXPECT_EQ(1u, max_active_loading());
195 } 218 }
196 219
197 // Tests adding, starting, and destroying (i.e. an implicit stop) a single host. 220 // Tests adding, starting, and destroying (i.e. an implicit stop) a single host.
198 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndStartAndDestroyOneHost) { 221 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndStartAndDestroyOneHost) {
199 DeferredStartRenderHost* host = CreateHost(); 222 DeferredStartRenderHost* host = CreateHost();
200 queue()->Add(host); 223 queue()->Add(host);
201 queue()->OnDeferredStartRenderHostDidStartLoading(host); 224 queue()->OnDeferredStartRenderHostDidStartLoading(host);
202 queue()->OnDeferredStartRenderHostDestroyed(host); 225 queue()->OnDeferredStartRenderHostDestroyed(host);
203 226
204 base::RunLoop().RunUntilIdle(); 227 base::RunLoop().RunUntilIdle();
205 ASSERT_TRUE(finished()); 228 ASSERT_TRUE(finished());
206 EXPECT_EQ(1u, num_queued()); 229 EXPECT_EQ(1u, num_queued());
207 EXPECT_EQ(1u, num_loaded()); 230 EXPECT_EQ(1u, num_loaded());
208 EXPECT_EQ(1u, max_in_queue()); 231 EXPECT_EQ(1u, max_awaiting_loading());
209 EXPECT_EQ(1u, max_active_loading()); 232 EXPECT_EQ(1u, max_active_loading());
210 } 233 }
211 234
212 // Tests adding, starting, and removing a single host. 235 // Tests adding, starting, and removing a single host.
213 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndStartAndRemoveOneHost) { 236 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndStartAndRemoveOneHost) {
214 DeferredStartRenderHost* host = CreateHost(); 237 DeferredStartRenderHost* host = CreateHost();
215 queue()->Add(host); 238 queue()->Add(host);
216 queue()->OnDeferredStartRenderHostDidStartLoading(host); 239 queue()->OnDeferredStartRenderHostDidStartLoading(host);
217 queue()->Remove(host); 240 queue()->Remove(host);
218 241
219 base::RunLoop().RunUntilIdle(); 242 base::RunLoop().RunUntilIdle();
220 ASSERT_TRUE(finished()); 243 ASSERT_TRUE(finished());
221 EXPECT_EQ(1u, num_queued()); 244 EXPECT_EQ(1u, num_queued());
222 EXPECT_EQ(0u, num_loaded()); 245 EXPECT_EQ(0u, num_loaded());
223 EXPECT_EQ(1u, max_in_queue()); 246 EXPECT_EQ(1u, max_awaiting_loading());
224 EXPECT_EQ(1u, max_active_loading()); 247 EXPECT_EQ(1u, max_active_loading());
225 } 248 }
226 249
227 // Tests monitoring a sequence of hosts. 250 // Tests monitoring a sequence of hosts.
228 TEST_F(LoadMonitoringExtensionHostQueueTest, Sequence) { 251 TEST_F(LoadMonitoringExtensionHostQueueTest, Sequence) {
229 // Scenario: 252 // Scenario:
230 // 253 //
231 // 6 hosts will be added, only 5 will start loading, with a maximum of 4 in 254 // 6 hosts will be added, only 5 will start loading, with a maximum of 4 in
232 // the queue and 3 loading at any time. Only 2 will finish. 255 // the queue and 3 loading at any time. Only 2 will finish.
233 DeferredStartRenderHost* host1 = CreateHost(); 256 DeferredStartRenderHost* host1 = CreateHost();
(...skipping 17 matching lines...) Expand all
251 274
252 queue()->OnDeferredStartRenderHostDidStartLoading(host3); 275 queue()->OnDeferredStartRenderHostDidStartLoading(host3);
253 queue()->OnDeferredStartRenderHostDidStartLoading(host4); 276 queue()->OnDeferredStartRenderHostDidStartLoading(host4);
254 queue()->OnDeferredStartRenderHostDidStopLoading(host4); 277 queue()->OnDeferredStartRenderHostDidStopLoading(host4);
255 queue()->OnDeferredStartRenderHostDidStartLoading(host5); 278 queue()->OnDeferredStartRenderHostDidStartLoading(host5);
256 279
257 base::RunLoop().RunUntilIdle(); 280 base::RunLoop().RunUntilIdle();
258 ASSERT_TRUE(finished()); 281 ASSERT_TRUE(finished());
259 EXPECT_EQ(6u, num_queued()); 282 EXPECT_EQ(6u, num_queued());
260 EXPECT_EQ(2u, num_loaded()); 283 EXPECT_EQ(2u, num_loaded());
261 EXPECT_EQ(4u, max_in_queue()); 284 EXPECT_EQ(4u, max_awaiting_loading());
262 EXPECT_EQ(3u, max_active_loading()); 285 EXPECT_EQ(3u, max_active_loading());
263 286
264 // Sanity check: complete a realistic sequence by stopping and/or destroying 287 // Complete a realistic sequence by stopping and/or destroying all hosts.
265 // all of the hosts. It shouldn't crash.
266 queue()->OnDeferredStartRenderHostDestroyed(host1); 288 queue()->OnDeferredStartRenderHostDestroyed(host1);
267 queue()->OnDeferredStartRenderHostDidStopLoading(host2); 289 queue()->OnDeferredStartRenderHostDidStopLoading(host2);
268 queue()->OnDeferredStartRenderHostDestroyed(host2); 290 queue()->OnDeferredStartRenderHostDestroyed(host2);
269 queue()->OnDeferredStartRenderHostDidStopLoading(host3); 291 queue()->OnDeferredStartRenderHostDidStopLoading(host3);
270 queue()->OnDeferredStartRenderHostDestroyed(host3); 292 queue()->OnDeferredStartRenderHostDestroyed(host3);
271 queue()->OnDeferredStartRenderHostDestroyed(host4); 293 queue()->OnDeferredStartRenderHostDestroyed(host4);
272 queue()->OnDeferredStartRenderHostDestroyed(host5); // never stopped 294 queue()->OnDeferredStartRenderHostDestroyed(host5); // never stopped
273 queue()->OnDeferredStartRenderHostDestroyed(host6); // never started/stopped 295 queue()->OnDeferredStartRenderHostDestroyed(host6); // never started/stopped
274 } 296 }
275 297
298 // Tests that the queue is observing Hosts from adding them through to being
299 // removed - that the load sequence itself is irrelevant.
300 //
301 // This is an unfortunate implementation-style test, but it used to be a bug
302 // and difficult to catch outside of a proper test framework - one in which we
303 // don't have to trigger events by hand.
304 TEST_F(LoadMonitoringExtensionHostQueueTest, ObserverLifetime) {
305 StubDeferredStartRenderHost* host1 = CreateHost();
306 StubDeferredStartRenderHost* host2 = CreateHost();
307 StubDeferredStartRenderHost* host3 = CreateHost();
308 StubDeferredStartRenderHost* host4 = CreateHost();
309
310 EXPECT_FALSE(host1->IsObservedBy(queue()));
311 EXPECT_FALSE(host2->IsObservedBy(queue()));
312 EXPECT_FALSE(host3->IsObservedBy(queue()));
313 EXPECT_FALSE(host4->IsObservedBy(queue()));
314
315 queue()->Add(host1);
316 queue()->Add(host2);
317 queue()->Add(host3);
318 queue()->Add(host4);
319
320 EXPECT_TRUE(host1->IsObservedBy(queue()));
321 EXPECT_TRUE(host2->IsObservedBy(queue()));
322 EXPECT_TRUE(host3->IsObservedBy(queue()));
323 EXPECT_TRUE(host4->IsObservedBy(queue()));
324
325 queue()->OnDeferredStartRenderHostDidStartLoading(host1);
326 queue()->OnDeferredStartRenderHostDidStartLoading(host2);
327 queue()->OnDeferredStartRenderHostDidStartLoading(host3);
328 // host4 will test that we Remove before Starting - so don't start.
329
330 EXPECT_TRUE(host1->IsObservedBy(queue()));
331 EXPECT_TRUE(host2->IsObservedBy(queue()));
332 EXPECT_TRUE(host3->IsObservedBy(queue()));
333 EXPECT_TRUE(host4->IsObservedBy(queue()));
334
335 queue()->OnDeferredStartRenderHostDidStopLoading(host1);
336 queue()->OnDeferredStartRenderHostDestroyed(host2);
337
338 EXPECT_TRUE(host1->IsObservedBy(queue()));
339 EXPECT_TRUE(host2->IsObservedBy(queue()));
340
341 queue()->Remove(host1);
342 queue()->Remove(host2);
343 queue()->Remove(host3);
344 queue()->Remove(host4);
345
346 EXPECT_FALSE(host1->IsObservedBy(queue()));
347 EXPECT_FALSE(host2->IsObservedBy(queue()));
348 EXPECT_FALSE(host3->IsObservedBy(queue()));
349 EXPECT_FALSE(host4->IsObservedBy(queue()));
350 }
351
276 } // namespace extensions 352 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/load_monitoring_extension_host_queue.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698