[modular] Fix DismissView callbacks not called when story is stopped

When a story is stopped, StoryControllerImpl calls
ViewController.Dimiss as part of the teardown, with a timeout.
The Dismiss implementation is expected to close ViewController
in respose. This change ensures:

* Closing ViewController is not treated as an error when
   the story is being stopped
* The story is not stopped again
* ViewControllers and callbacks are cleaned up properly
* FakeGraphicalPresenter closes ViewController on Dismiss to
  avoid a timeout causing slow teardown

This also speeds up sessionmgr_integration_test by 10x+ for individual
tests and 2x overall:

Before (unaffected tests omitted):
[==========] Running 10 tests from 2 test suites.
[----------] Global test environment set-up.
[----------] 9 tests from SessionmgrIntegrationTest
[ RUN      ] SessionmgrIntegrationTest.PresentViewIsCalled
[       OK ] SessionmgrIntegrationTest.PresentViewIsCalled (3311 ms)
[ RUN      ] SessionmgrIntegrationTest.AnnotationsArePassedToGraphicalPresenter
[       OK ] SessionmgrIntegrationTest.AnnotationsArePassedToGraphicalPresenter (3306 ms)
[ RUN      ] SessionmgrIntegrationTest.DeleteStoryWhenViewControllerIsClosed
[       OK ] SessionmgrIntegrationTest.DeleteStoryWhenViewControllerIsClosed (6351 ms)
...
[----------] 9 tests from SessionmgrIntegrationTest (25461 ms total)

[==========] Running 10 tests from 2 test suites.
[----------] Global test environment set-up.
[----------] 9 tests from SessionmgrIntegrationTest
[ RUN      ] SessionmgrIntegrationTest.PresentViewIsCalled
[       OK ] SessionmgrIntegrationTest.PresentViewIsCalled (245 ms)
[ RUN      ] SessionmgrIntegrationTest.AnnotationsArePassedToGraphicalPresenter
[       OK ] SessionmgrIntegrationTest.AnnotationsArePassedToGraphicalPresenter (255 ms)
[ RUN      ] SessionmgrIntegrationTest.DeleteStoryWhenViewControllerIsClosed
[       OK ] SessionmgrIntegrationTest.DeleteStoryWhenViewControllerIsClosed (256 ms)
...
[----------] 9 tests from SessionmgrIntegrationTest (12909 ms total)

Change-Id: I9c83d4b0b6b7c4ecd3dc2ccb38f7fa960de76ab1
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/475745
Commit-Queue: Yegor Pomortsev <ypomortsev@google.com>
Reviewed-by: Gabe Schine <thatguy@google.com>
3 files changed
tree: 96ac5839654abe92e5853d2a71e242ca3bcbb5cf
  1. boards/
  2. build/
  3. buildtools/
  4. bundles/
  5. docs/
  6. examples/
  7. garnet/
  8. products/
  9. scripts/
  10. sdk/
  11. src/
  12. third_party/
  13. tools/
  14. zircon/
  15. .clang-format
  16. .clang-tidy
  17. .git-blame-ignore-revs
  18. .gitattributes
  19. .gitignore
  20. .gn
  21. .style.yapf
  22. AUTHORS
  23. BUILD.gn
  24. CODE_OF_CONDUCT.md
  25. CONTRIBUTING.md
  26. LICENSE
  27. OWNERS
  28. PATENTS
  29. README.md
  30. rustfmt.toml
README.md

Fuchsia

Pink + Purple == Fuchsia (a new operating system)

What is Fuchsia?

Fuchsia is a modular, capability-based operating system. Fuchsia runs on modern 64-bit Intel and ARM processors.

Fuchsia is an open source project with a code of conduct that we expect everyone who interacts with the project to respect.

Read more about Fuchsia's principles.

How can I build and run Fuchsia?

See Getting Started.

Where can I learn more about Fuchsia?

See fuchsia.dev.