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

Side by Side Diff: base/message_loop/message_loop_test.cc

Issue 2818533003: Make nesting/running states a RunLoop rather than a MessageLoop concept. (Closed)
Patch Set: still need to check MessageLoop::current() in Mojo's RunLoopNestingObserver::GetForThread() Created 3 years, 7 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 | « base/message_loop/message_loop_test.h ('k') | base/run_loop.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "base/message_loop/message_loop_test.h" 5 #include "base/message_loop/message_loop_test.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 std::unique_ptr<MessagePump> pump(factory()); 368 std::unique_ptr<MessagePump> pump(factory());
369 MessageLoop loop(std::move(pump)); 369 MessageLoop loop(std::move(pump));
370 370
371 int depth = 100; 371 int depth = 100;
372 ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 372 ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
373 BindOnce(&NestingFunc, &depth)); 373 BindOnce(&NestingFunc, &depth));
374 RunLoop().Run(); 374 RunLoop().Run();
375 EXPECT_EQ(depth, 0); 375 EXPECT_EQ(depth, 0);
376 } 376 }
377 377
378 // A NestingObserver that tracks the number of nested message loop starts it
379 // has seen.
380 class TestNestingObserver : public MessageLoop::NestingObserver {
381 public:
382 TestNestingObserver() {}
383 ~TestNestingObserver() override {}
384
385 int begin_nested_loop_count() const { return begin_nested_loop_count_; }
386
387 // MessageLoop::NestingObserver:
388 void OnBeginNestedMessageLoop() override { begin_nested_loop_count_++; }
389
390 private:
391 int begin_nested_loop_count_ = 0;
392
393 DISALLOW_COPY_AND_ASSIGN(TestNestingObserver);
394 };
395
396 void ExpectOneBeginNestedLoop(TestNestingObserver* observer) {
397 EXPECT_EQ(1, observer->begin_nested_loop_count());
398 }
399
400 // Starts a nested message loop.
401 void RunNestedLoop(TestNestingObserver* observer,
402 const Closure& quit_outer_loop) {
403 // The nested loop hasn't started yet.
404 EXPECT_EQ(0, observer->begin_nested_loop_count());
405
406 MessageLoop::ScopedNestableTaskAllower allow(MessageLoop::current());
407 RunLoop nested_loop;
408 // Verify that by the time the first task is run the observer has seen the
409 // message loop begin.
410 ThreadTaskRunnerHandle::Get()->PostTask(
411 FROM_HERE, BindOnce(&ExpectOneBeginNestedLoop, observer));
412 ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, nested_loop.QuitClosure());
413 nested_loop.Run();
414
415 // Quitting message loops doesn't change the begin count.
416 EXPECT_EQ(1, observer->begin_nested_loop_count());
417
418 quit_outer_loop.Run();
419 }
420
421 // Tests that a NestingObserver is notified when a nested message loop begins.
422 void RunTest_NestingObserver(MessagePumpFactory factory) {
423 std::unique_ptr<MessagePump> pump(factory());
424 MessageLoop outer_loop(std::move(pump));
425
426 // Observe the outer loop for nested message loops beginning.
427 TestNestingObserver nesting_observer;
428 outer_loop.AddNestingObserver(&nesting_observer);
429
430 // Post a task that runs a nested message loop.
431 outer_loop.task_runner()->PostTask(
432 FROM_HERE, BindOnce(&RunNestedLoop, &nesting_observer,
433 outer_loop.QuitWhenIdleClosure()));
434 RunLoop().Run();
435
436 outer_loop.RemoveNestingObserver(&nesting_observer);
437 }
438
439 enum TaskType { 378 enum TaskType {
440 MESSAGEBOX, 379 MESSAGEBOX,
441 ENDDIALOG, 380 ENDDIALOG,
442 RECURSIVE, 381 RECURSIVE,
443 TIMEDMESSAGELOOP, 382 TIMEDMESSAGELOOP,
444 QUITMESSAGELOOP, 383 QUITMESSAGELOOP,
445 ORDERED, 384 ORDERED,
446 PUMPS, 385 PUMPS,
447 SLEEP, 386 SLEEP,
448 RUNS, 387 RUNS,
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after
1047 const int kNumTimes = 1 << 17; 986 const int kNumTimes = 1 << 17;
1048 std::unique_ptr<MessagePump> pump(factory()); 987 std::unique_ptr<MessagePump> pump(factory());
1049 MessageLoop loop(std::move(pump)); 988 MessageLoop loop(std::move(pump));
1050 loop.task_runner()->PostTask(FROM_HERE, 989 loop.task_runner()->PostTask(FROM_HERE,
1051 BindOnce(&PostNTasksThenQuit, kNumTimes)); 990 BindOnce(&PostNTasksThenQuit, kNumTimes));
1052 RunLoop().Run(); 991 RunLoop().Run();
1053 } 992 }
1054 993
1055 } // namespace test 994 } // namespace test
1056 } // namespace base 995 } // namespace base
OLDNEW
« no previous file with comments | « base/message_loop/message_loop_test.h ('k') | base/run_loop.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698