commit | a271a5c03ac21d19725c214898ff3c4e8f555eec | [log] [tgz] |
---|---|---|
author | Francois Doray <[email protected]> | Tue Apr 03 18:37:11 2018 |
committer | Commit Bot <[email protected]> | Tue Apr 03 18:37:11 2018 |
tree | 80137f692b8a8fd8bc073571048e5deb39697815 | |
parent | 3d4203128ed1dbcd991528ad05ddd2185a3bbb05 [diff] [blame] |
Use LifecycleUnits for tab discarding (reland). This CL previously landed as https://chromium-review.googlesource.com/c/chromium/src/+/842306 It was reverted because TabLifecycleUnits were not always destroyed when tabs were closed, which caused invalid memory accesses. This was solved by https://chromium-review.googlesource.com/c/chromium/src/+/980587 TabManager discards tabs, but also ARC processes. LifecycleUnit is an abstraction to help us having one code path for all discards. [email protected],[email protected] Bug: 775644 Change-Id: Ib7f3dfd8b7e9b43ad75020c65e12d94229ba1a07 Reviewed-on: https://chromium-review.googlesource.com/980742 Reviewed-by: François Doray <[email protected]> Reviewed-by: Sébastien Marchand <[email protected]> Commit-Queue: François Doray <[email protected]> Cr-Commit-Position: refs/heads/master@{#547769}
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc index 6609cd1..b447597 100644 --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc
@@ -70,6 +70,7 @@ #include "chrome/browser/printing/print_job_manager.h" #include "chrome/browser/printing/print_preview_dialog_controller.h" #include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/resource_coordinator/tab_lifecycle_unit_source.h" #include "chrome/browser/safe_browsing/safe_browsing_service.h" #include "chrome/browser/shell_integration.h" #include "chrome/browser/status_icons/status_tray.h" @@ -849,8 +850,12 @@ resource_coordinator::TabManager* BrowserProcessImpl::GetTabManager() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) - if (!tab_manager_) + if (!tab_manager_) { tab_manager_ = std::make_unique<resource_coordinator::TabManager>(); + tab_lifecycle_unit_source_ = + std::make_unique<resource_coordinator::TabLifecycleUnitSource>(); + tab_lifecycle_unit_source_->AddObserver(tab_manager_.get()); + } return tab_manager_.get(); #else return nullptr;