[iOS] Remove TabModel

This CL factors out the remaining responsibilities of TabModel and
removes it. It introduces a functional change in how sessions are saved
when scenes background.

For the purposes of this code, "saving sessions" involves both updating
the session store and writing out snapshots of the active web states.

TabModels -- which were per-browser objects -- listed for the
UIApplication lifecycle notifications to determine when to save
sessions. This means that when the application backgrounds, all of the
connected scenes save the sessions for the active webstates in their
browsers. It also means that sessions are *not* saved when individual
scenes background. (This is not the only trigger for saving sessions
in Chrome, just the one determined by app/scene lifecycles).

This CL changes this backgrounding logic, moving it to a scene state
agent. This agent observes the scene state transitions, and now it
saves sessions per-scene, whenever that scene backgrounds.

The other responsibility of TabModel was to close all of the web states
in a web state list when the owning Browser is shut down. This CL moves
that responsibility to BrowserViewWrangler, which is the current owner
of Browser lifecycles. Potentially it could be migrated to the
BrowserImpl class in the future for even better encapsulation.

Because there are some circumstances where the app may shut down
without being backgrounded (if it is force-quit in the app switcher
when no other apps are present, for example), this CL adds a check to
the shutdown code in SceneController that asks the scene to save the
session if needed. (Sessions are marked as needing saving if the
scene has foregrounded since the previous save).

Bug: 1045575, 1115611, 1110966, 783777
Change-Id: Ic70f4d1b839ab95757196a805ccac21c36b7dc83
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3063619
Commit-Queue: Mark Cogan <marq@chromium.org>
Reviewed-by: Rohit Rao <rohitrao@chromium.org>
Reviewed-by: Mohammad Refaat <mrefaat@chromium.org>
Cr-Commit-Position: refs/heads/master@{#908028}
18 files changed
tree: 9a3296ccbcc973e1e85c021d45ad1308f71a5eba
  1. android_webview/
  2. apps/
  3. ash/
  4. base/
  5. build/
  6. build_overrides/
  7. buildtools/
  8. cc/
  9. chrome/
  10. chromecast/
  11. chromeos/
  12. cloud_print/
  13. codelabs/
  14. components/
  15. content/
  16. courgette/
  17. crypto/
  18. dbus/
  19. device/
  20. docs/
  21. extensions/
  22. fuchsia/
  23. gin/
  24. google_apis/
  25. google_update/
  26. gpu/
  27. headless/
  28. infra/
  29. ios/
  30. ipc/
  31. jingle/
  32. media/
  33. mojo/
  34. native_client_sdk/
  35. net/
  36. pdf/
  37. ppapi/
  38. printing/
  39. remoting/
  40. rlz/
  41. sandbox/
  42. services/
  43. skia/
  44. sql/
  45. storage/
  46. styleguide/
  47. testing/
  48. third_party/
  49. tools/
  50. ui/
  51. url/
  52. weblayer/
  53. .clang-format
  54. .clang-tidy
  55. .eslintrc.js
  56. .git-blame-ignore-revs
  57. .gitattributes
  58. .gitignore
  59. .gn
  60. .mailmap
  61. .vpython
  62. .vpython3
  63. .yapfignore
  64. AUTHORS
  65. BUILD.gn
  66. CODE_OF_CONDUCT.md
  67. codereview.settings
  68. DEPS
  69. DIR_METADATA
  70. ENG_REVIEW_OWNERS
  71. LICENSE
  72. LICENSE.chromium_os
  73. OWNERS
  74. PRESUBMIT.py
  75. PRESUBMIT_test.py
  76. PRESUBMIT_test_mocks.py
  77. README.md
  78. WATCHLISTS
README.md

Logo Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

The project's web site is https://www.chromium.org.

To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.

Documentation in the source is rooted in docs/README.md.

Learn how to Get Around the Chromium Source Code Directory Structure .

For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.

If you found a bug, please file it at https://crbug.com/new.