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

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: Add test, remove log 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
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_waiting_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() { 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_waiting_loading() { return max_waiting_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_waiting_loading,
77 size_t max_active_loading) { 90 size_t max_active_loading) {
78 finished_ = true; 91 finished_ = true;
79 num_queued_ = num_queued; 92 num_queued_ = num_queued;
80 num_loaded_ = num_loaded; 93 num_loaded_ = num_loaded;
81 max_in_queue_ = max_in_queue; 94 max_waiting_loading_ = max_waiting_loading;
82 max_active_loading_ = max_active_loading; 95 max_active_loading_ = max_active_loading;
83 } 96 }
84 97
85 content::TestBrowserThreadBundle thread_bundle_; 98 content::TestBrowserThreadBundle thread_bundle_;
86 scoped_ptr<LoadMonitoringExtensionHostQueue> queue_; 99 scoped_ptr<LoadMonitoringExtensionHostQueue> queue_;
87 ScopedVector<StubDeferredStartRenderHost> stubs_; 100 ScopedVector<StubDeferredStartRenderHost> stubs_;
88 101
89 // Set after the queue has finished monitoring. 102 // Set after the queue has finished monitoring.
90 bool finished_; 103 bool finished_;
91 size_t num_queued_; 104 size_t num_queued_;
92 size_t num_loaded_; 105 size_t num_loaded_;
93 size_t max_in_queue_; 106 size_t max_waiting_loading_;
94 size_t max_active_loading_; 107 size_t max_active_loading_;
95 }; 108 };
96 109
97 // Tests that if monitoring is never started, nor any hosts added, nothing is 110 // Tests that if monitoring is never started, nor any hosts added, nothing is
98 // recorded. 111 // recorded.
99 TEST_F(LoadMonitoringExtensionHostQueueTest, NeverStarted) { 112 TEST_F(LoadMonitoringExtensionHostQueueTest, NeverStarted) {
100 base::RunLoop().RunUntilIdle(); 113 base::RunLoop().RunUntilIdle();
101 ASSERT_FALSE(finished()); 114 ASSERT_FALSE(finished());
102 } 115 }
103 116
104 // Tests that if monitoring has started but no hosts added, it's recorded as 0. 117 // Tests that if monitoring has started but no hosts added, it's recorded as 0.
105 TEST_F(LoadMonitoringExtensionHostQueueTest, NoHosts) { 118 TEST_F(LoadMonitoringExtensionHostQueueTest, NoHosts) {
106 queue()->StartMonitoring(); 119 queue()->StartMonitoring();
107 120
108 base::RunLoop().RunUntilIdle(); 121 base::RunLoop().RunUntilIdle();
109 ASSERT_TRUE(finished()); 122 ASSERT_TRUE(finished());
110 EXPECT_EQ(0u, num_queued()); 123 EXPECT_EQ(0u, num_queued());
111 EXPECT_EQ(0u, num_loaded()); 124 EXPECT_EQ(0u, num_loaded());
112 EXPECT_EQ(0u, max_in_queue()); 125 EXPECT_EQ(0u, max_waiting_loading());
113 EXPECT_EQ(0u, max_active_loading()); 126 EXPECT_EQ(0u, max_active_loading());
114 } 127 }
115 128
116 // Tests that adding a host starts monitoring. 129 // Tests that adding a host starts monitoring.
117 TEST_F(LoadMonitoringExtensionHostQueueTest, AddOneHost) { 130 TEST_F(LoadMonitoringExtensionHostQueueTest, AddOneHost) {
118 queue()->Add(CreateHost()); 131 queue()->Add(CreateHost());
119 132
120 base::RunLoop().RunUntilIdle(); 133 base::RunLoop().RunUntilIdle();
121 ASSERT_TRUE(finished()); 134 ASSERT_TRUE(finished());
122 EXPECT_EQ(1u, num_queued()); 135 EXPECT_EQ(1u, num_queued());
123 EXPECT_EQ(0u, num_loaded()); 136 EXPECT_EQ(0u, num_loaded());
124 EXPECT_EQ(1u, max_in_queue()); 137 EXPECT_EQ(1u, max_waiting_loading());
125 EXPECT_EQ(0u, max_active_loading()); 138 EXPECT_EQ(0u, max_active_loading());
126 } 139 }
127 140
128 // Tests that a host added and removed is still recorded, but not as a load 141 // Tests that a host added and removed is still recorded, but not as a load
129 // finished. 142 // finished.
130 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndRemoveOneHost) { 143 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndRemoveOneHost) {
131 DeferredStartRenderHost* host = CreateHost(); 144 DeferredStartRenderHost* host = CreateHost();
132 queue()->Add(host); 145 queue()->Add(host);
133 queue()->Remove(host); 146 queue()->Remove(host);
134 147
135 base::RunLoop().RunUntilIdle(); 148 base::RunLoop().RunUntilIdle();
136 ASSERT_TRUE(finished()); 149 ASSERT_TRUE(finished());
137 EXPECT_EQ(1u, num_queued()); 150 EXPECT_EQ(1u, num_queued());
138 EXPECT_EQ(0u, num_loaded()); 151 EXPECT_EQ(0u, num_loaded());
139 EXPECT_EQ(1u, max_in_queue()); 152 EXPECT_EQ(1u, max_waiting_loading());
140 EXPECT_EQ(0u, max_active_loading()); 153 EXPECT_EQ(0u, max_active_loading());
141 } 154 }
142 155
143 // Tests adding and starting a single host. 156 // Tests adding and starting a single host.
144 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndStartOneHost) { 157 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndStartOneHost) {
145 DeferredStartRenderHost* host = CreateHost(); 158 DeferredStartRenderHost* host = CreateHost();
146 queue()->Add(host); 159 queue()->Add(host);
147 queue()->OnDeferredStartRenderHostDidStartLoading(host); 160 queue()->OnDeferredStartRenderHostDidStartLoading(host);
148 161
149 base::RunLoop().RunUntilIdle(); 162 base::RunLoop().RunUntilIdle();
150 ASSERT_TRUE(finished()); 163 ASSERT_TRUE(finished());
151 EXPECT_EQ(1u, num_queued()); 164 EXPECT_EQ(1u, num_queued());
152 EXPECT_EQ(0u, num_loaded()); 165 EXPECT_EQ(0u, num_loaded());
153 EXPECT_EQ(1u, max_in_queue()); 166 EXPECT_EQ(1u, max_waiting_loading());
154 EXPECT_EQ(1u, max_active_loading()); 167 EXPECT_EQ(1u, max_active_loading());
155 168
156 // Sanity check: stopping/destroying at this point doesn't crash. 169 // Sanity check: stopping/destroying at this point doesn't crash.
157 queue()->OnDeferredStartRenderHostDidStopLoading(host); 170 queue()->OnDeferredStartRenderHostDidStopLoading(host);
158 queue()->OnDeferredStartRenderHostDestroyed(host); 171 queue()->OnDeferredStartRenderHostDestroyed(host);
159 } 172 }
160 173
161 // Tests adding and destroying a single host without starting it. 174 // Tests adding and destroying a single host without starting it.
162 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndDestroyOneHost) { 175 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndDestroyOneHost) {
163 DeferredStartRenderHost* host = CreateHost(); 176 DeferredStartRenderHost* host = CreateHost();
164 queue()->Add(host); 177 queue()->Add(host);
165 queue()->OnDeferredStartRenderHostDestroyed(host); 178 queue()->OnDeferredStartRenderHostDestroyed(host);
166 179
167 base::RunLoop().RunUntilIdle(); 180 base::RunLoop().RunUntilIdle();
168 ASSERT_TRUE(finished()); 181 ASSERT_TRUE(finished());
169 EXPECT_EQ(1u, num_queued()); 182 EXPECT_EQ(1u, num_queued());
170 EXPECT_EQ(0u, num_loaded()); 183 EXPECT_EQ(0u, num_loaded());
171 EXPECT_EQ(1u, max_in_queue()); 184 EXPECT_EQ(1u, max_waiting_loading());
172 EXPECT_EQ(0u, max_active_loading()); 185 EXPECT_EQ(0u, max_active_loading());
173 186
174 // Sanity check: stopping/destroying at this point doesn't crash. 187 // Sanity check: stopping/destroying at this point doesn't crash.
175 queue()->OnDeferredStartRenderHostDidStopLoading(host); 188 queue()->OnDeferredStartRenderHostDidStopLoading(host);
176 queue()->OnDeferredStartRenderHostDestroyed(host); 189 queue()->OnDeferredStartRenderHostDestroyed(host);
177 } 190 }
178 191
179 // Tests adding, starting, and stopping a single host. 192 // Tests adding, starting, and stopping a single host.
180 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndStartAndStopOneHost) { 193 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndStartAndStopOneHost) {
181 DeferredStartRenderHost* host = CreateHost(); 194 DeferredStartRenderHost* host = CreateHost();
182 queue()->Add(host); 195 queue()->Add(host);
183 queue()->OnDeferredStartRenderHostDidStartLoading(host); 196 queue()->OnDeferredStartRenderHostDidStartLoading(host);
184 queue()->OnDeferredStartRenderHostDidStopLoading(host); 197 queue()->OnDeferredStartRenderHostDidStopLoading(host);
185 198
186 base::RunLoop().RunUntilIdle(); 199 base::RunLoop().RunUntilIdle();
187 ASSERT_TRUE(finished()); 200 ASSERT_TRUE(finished());
188 EXPECT_EQ(1u, num_queued()); 201 EXPECT_EQ(1u, num_queued());
189 EXPECT_EQ(1u, num_loaded()); 202 EXPECT_EQ(1u, num_loaded());
190 EXPECT_EQ(1u, max_in_queue()); 203 EXPECT_EQ(1u, max_waiting_loading());
191 EXPECT_EQ(1u, max_active_loading()); 204 EXPECT_EQ(1u, max_active_loading());
192 205
193 // Sanity check: destroying at this point doesn't crash. 206 // Sanity check: destroying at this point doesn't crash.
194 queue()->OnDeferredStartRenderHostDestroyed(host); 207 queue()->OnDeferredStartRenderHostDestroyed(host);
195 } 208 }
196 209
197 // Tests adding, starting, and destroying (i.e. an implicit stop) a single host. 210 // Tests adding, starting, and destroying (i.e. an implicit stop) a single host.
198 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndStartAndDestroyOneHost) { 211 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndStartAndDestroyOneHost) {
199 DeferredStartRenderHost* host = CreateHost(); 212 DeferredStartRenderHost* host = CreateHost();
200 queue()->Add(host); 213 queue()->Add(host);
201 queue()->OnDeferredStartRenderHostDidStartLoading(host); 214 queue()->OnDeferredStartRenderHostDidStartLoading(host);
202 queue()->OnDeferredStartRenderHostDestroyed(host); 215 queue()->OnDeferredStartRenderHostDestroyed(host);
203 216
204 base::RunLoop().RunUntilIdle(); 217 base::RunLoop().RunUntilIdle();
205 ASSERT_TRUE(finished()); 218 ASSERT_TRUE(finished());
206 EXPECT_EQ(1u, num_queued()); 219 EXPECT_EQ(1u, num_queued());
207 EXPECT_EQ(1u, num_loaded()); 220 EXPECT_EQ(1u, num_loaded());
208 EXPECT_EQ(1u, max_in_queue()); 221 EXPECT_EQ(1u, max_waiting_loading());
209 EXPECT_EQ(1u, max_active_loading()); 222 EXPECT_EQ(1u, max_active_loading());
210 } 223 }
211 224
212 // Tests adding, starting, and removing a single host. 225 // Tests adding, starting, and removing a single host.
213 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndStartAndRemoveOneHost) { 226 TEST_F(LoadMonitoringExtensionHostQueueTest, AddAndStartAndRemoveOneHost) {
214 DeferredStartRenderHost* host = CreateHost(); 227 DeferredStartRenderHost* host = CreateHost();
215 queue()->Add(host); 228 queue()->Add(host);
216 queue()->OnDeferredStartRenderHostDidStartLoading(host); 229 queue()->OnDeferredStartRenderHostDidStartLoading(host);
217 queue()->Remove(host); 230 queue()->Remove(host);
218 231
219 base::RunLoop().RunUntilIdle(); 232 base::RunLoop().RunUntilIdle();
220 ASSERT_TRUE(finished()); 233 ASSERT_TRUE(finished());
221 EXPECT_EQ(1u, num_queued()); 234 EXPECT_EQ(1u, num_queued());
222 EXPECT_EQ(0u, num_loaded()); 235 EXPECT_EQ(0u, num_loaded());
223 EXPECT_EQ(1u, max_in_queue()); 236 EXPECT_EQ(1u, max_waiting_loading());
224 EXPECT_EQ(1u, max_active_loading()); 237 EXPECT_EQ(1u, max_active_loading());
225 } 238 }
226 239
227 // Tests monitoring a sequence of hosts. 240 // Tests monitoring a sequence of hosts.
228 TEST_F(LoadMonitoringExtensionHostQueueTest, Sequence) { 241 TEST_F(LoadMonitoringExtensionHostQueueTest, Sequence) {
229 // Scenario: 242 // Scenario:
230 // 243 //
231 // 6 hosts will be added, only 5 will start loading, with a maximum of 4 in 244 // 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. 245 // the queue and 3 loading at any time. Only 2 will finish.
233 DeferredStartRenderHost* host1 = CreateHost(); 246 DeferredStartRenderHost* host1 = CreateHost();
(...skipping 17 matching lines...) Expand all
251 264
252 queue()->OnDeferredStartRenderHostDidStartLoading(host3); 265 queue()->OnDeferredStartRenderHostDidStartLoading(host3);
253 queue()->OnDeferredStartRenderHostDidStartLoading(host4); 266 queue()->OnDeferredStartRenderHostDidStartLoading(host4);
254 queue()->OnDeferredStartRenderHostDidStopLoading(host4); 267 queue()->OnDeferredStartRenderHostDidStopLoading(host4);
255 queue()->OnDeferredStartRenderHostDidStartLoading(host5); 268 queue()->OnDeferredStartRenderHostDidStartLoading(host5);
256 269
257 base::RunLoop().RunUntilIdle(); 270 base::RunLoop().RunUntilIdle();
258 ASSERT_TRUE(finished()); 271 ASSERT_TRUE(finished());
259 EXPECT_EQ(6u, num_queued()); 272 EXPECT_EQ(6u, num_queued());
260 EXPECT_EQ(2u, num_loaded()); 273 EXPECT_EQ(2u, num_loaded());
261 EXPECT_EQ(4u, max_in_queue()); 274 EXPECT_EQ(4u, max_waiting_loading());
262 EXPECT_EQ(3u, max_active_loading()); 275 EXPECT_EQ(3u, max_active_loading());
263 276
264 // Sanity check: complete a realistic sequence by stopping and/or destroying 277 // Sanity check: complete a realistic sequence by stopping and/or destroying
265 // all of the hosts. It shouldn't crash. 278 // all of the hosts. It shouldn't crash.
266 queue()->OnDeferredStartRenderHostDestroyed(host1); 279 queue()->OnDeferredStartRenderHostDestroyed(host1);
267 queue()->OnDeferredStartRenderHostDidStopLoading(host2); 280 queue()->OnDeferredStartRenderHostDidStopLoading(host2);
268 queue()->OnDeferredStartRenderHostDestroyed(host2); 281 queue()->OnDeferredStartRenderHostDestroyed(host2);
269 queue()->OnDeferredStartRenderHostDidStopLoading(host3); 282 queue()->OnDeferredStartRenderHostDidStopLoading(host3);
270 queue()->OnDeferredStartRenderHostDestroyed(host3); 283 queue()->OnDeferredStartRenderHostDestroyed(host3);
271 queue()->OnDeferredStartRenderHostDestroyed(host4); 284 queue()->OnDeferredStartRenderHostDestroyed(host4);
272 queue()->OnDeferredStartRenderHostDestroyed(host5); // never stopped 285 queue()->OnDeferredStartRenderHostDestroyed(host5); // never stopped
273 queue()->OnDeferredStartRenderHostDestroyed(host6); // never started/stopped 286 queue()->OnDeferredStartRenderHostDestroyed(host6); // never started/stopped
274 } 287 }
275 288
289 // Tests that the queue is observing Hosts from adding them through to being
290 // removed - that the load sequence itself is irrelevant.
291 //
292 // This is an unfortunate implementation-style test, but it used to be a bug
293 // and difficult to catch outside of a proper test framework - one in which we
294 // don't have to trigger events by hand.
295 TEST_F(LoadMonitoringExtensionHostQueueTest, ObserverLifetime) {
296 StubDeferredStartRenderHost* host1 = CreateHost();
297 StubDeferredStartRenderHost* host2 = CreateHost();
298 StubDeferredStartRenderHost* host3 = CreateHost();
299 StubDeferredStartRenderHost* host4 = CreateHost();
300
301 EXPECT_FALSE(host1->IsObservedBy(queue()));
302 EXPECT_FALSE(host2->IsObservedBy(queue()));
303 EXPECT_FALSE(host3->IsObservedBy(queue()));
304 EXPECT_FALSE(host4->IsObservedBy(queue()));
305
306 queue()->Add(host1);
307 queue()->Add(host2);
308 queue()->Add(host3);
309 queue()->Add(host4);
310
311 EXPECT_TRUE(host1->IsObservedBy(queue()));
312 EXPECT_TRUE(host2->IsObservedBy(queue()));
313 EXPECT_TRUE(host3->IsObservedBy(queue()));
314 EXPECT_TRUE(host4->IsObservedBy(queue()));
315
316 queue()->OnDeferredStartRenderHostDidStartLoading(host1);
317 queue()->OnDeferredStartRenderHostDidStartLoading(host2);
318 queue()->OnDeferredStartRenderHostDidStartLoading(host3);
319 // host4 will test that we Remove before Starting - so don't start.
320
321 EXPECT_TRUE(host1->IsObservedBy(queue()));
322 EXPECT_TRUE(host2->IsObservedBy(queue()));
323 EXPECT_TRUE(host3->IsObservedBy(queue()));
324 EXPECT_TRUE(host4->IsObservedBy(queue()));
325
326 queue()->OnDeferredStartRenderHostDidStopLoading(host1);
327 queue()->OnDeferredStartRenderHostDestroyed(host2);
328
329 EXPECT_TRUE(host1->IsObservedBy(queue()));
330 EXPECT_TRUE(host2->IsObservedBy(queue()));
331
332 queue()->Remove(host1);
333 queue()->Remove(host2);
334 queue()->Remove(host3);
335 queue()->Remove(host4);
336
337 EXPECT_FALSE(host1->IsObservedBy(queue()));
338 EXPECT_FALSE(host2->IsObservedBy(queue()));
339 EXPECT_FALSE(host3->IsObservedBy(queue()));
340 EXPECT_FALSE(host4->IsObservedBy(queue()));
341 }
342
276 } // namespace extensions 343 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698