summaryrefslogtreecommitdiff
path: root/chromium/chrome/browser/ui/webui/discards/discards_ui.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/browser/ui/webui/discards/discards_ui.cc')
-rw-r--r--chromium/chrome/browser/ui/webui/discards/discards_ui.cc57
1 files changed, 39 insertions, 18 deletions
diff --git a/chromium/chrome/browser/ui/webui/discards/discards_ui.cc b/chromium/chrome/browser/ui/webui/discards/discards_ui.cc
index bcf0a16b0c2..c61409079e2 100644
--- a/chromium/chrome/browser/ui/webui/discards/discards_ui.cc
+++ b/chromium/chrome/browser/ui/webui/discards/discards_ui.cc
@@ -14,6 +14,7 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/resource_coordinator/discard_reason.h"
#include "chrome/browser/resource_coordinator/lifecycle_unit.h"
+#include "chrome/browser/resource_coordinator/tab_activity_watcher.h"
#include "chrome/browser/resource_coordinator/tab_lifecycle_unit_external.h"
#include "chrome/browser/resource_coordinator/tab_manager.h"
#include "chrome/browser/resource_coordinator/time.h"
@@ -50,6 +51,15 @@ mojom::LifecycleUnitVisibility GetLifecycleUnitVisibility(
#endif
}
+resource_coordinator::LifecycleUnit* GetLifecycleUnitById(int32_t id) {
+ for (resource_coordinator::LifecycleUnit* lifecycle_unit :
+ g_browser_process->GetTabManager()->GetSortedLifecycleUnits()) {
+ if (lifecycle_unit->GetID() == id)
+ return lifecycle_unit;
+ }
+ return nullptr;
+}
+
class DiscardsDetailsProviderImpl : public mojom::DiscardsDetailsProvider {
public:
// This instance is deleted when the supplied pipe is destroyed.
@@ -83,18 +93,16 @@ class DiscardsDetailsProviderImpl : public mojom::DiscardsDetailsProvider {
tab_lifecycle_unit_external->GetWebContents();
info->tab_url = contents->GetLastCommittedURL().spec();
- // This can be empty for pages without a favicon. The WebUI takes care of
- // showing the chrome://favicon default in that case.
- info->favicon_url = lifecycle_unit->GetIconURL();
info->title = base::UTF16ToUTF8(lifecycle_unit->GetTitle());
info->visibility =
GetLifecycleUnitVisibility(lifecycle_unit->GetVisibility());
info->is_media = tab_lifecycle_unit_external->IsMediaTab();
+ info->is_frozen = tab_lifecycle_unit_external->IsFrozen();
info->is_discarded = tab_lifecycle_unit_external->IsDiscarded();
info->discard_count = tab_lifecycle_unit_external->GetDiscardCount();
info->utility_rank = rank++;
const base::TimeTicks last_focused_time =
- lifecycle_unit->GetSortKey().last_focused_time;
+ lifecycle_unit->GetLastFocusedTime();
const base::TimeDelta elapsed =
(last_focused_time == base::TimeTicks::Max())
? base::TimeDelta()
@@ -103,6 +111,12 @@ class DiscardsDetailsProviderImpl : public mojom::DiscardsDetailsProvider {
info->is_auto_discardable =
tab_lifecycle_unit_external->IsAutoDiscardable();
info->id = lifecycle_unit->GetID();
+ base::Optional<float> reactivation_score =
+ resource_coordinator::TabActivityWatcher::GetInstance()
+ ->CalculateReactivationScore(contents);
+ info->has_reactivation_score = reactivation_score.has_value();
+ if (info->has_reactivation_score)
+ info->reactivation_score = reactivation_score.value();
infos.push_back(std::move(info));
}
@@ -110,28 +124,32 @@ class DiscardsDetailsProviderImpl : public mojom::DiscardsDetailsProvider {
std::move(callback).Run(std::move(infos));
}
- void SetAutoDiscardable(int32_t tab_id,
+ void SetAutoDiscardable(int32_t id,
bool is_auto_discardable,
SetAutoDiscardableCallback callback) override {
- resource_coordinator::TabManager* tab_manager =
- g_browser_process->GetTabManager();
- tab_manager->SetTabAutoDiscardableState(tab_id, is_auto_discardable);
+ auto* lifecycle_unit = GetLifecycleUnitById(id);
+ if (lifecycle_unit) {
+ auto* tab_lifecycle_unit_external =
+ lifecycle_unit->AsTabLifecycleUnitExternal();
+ if (tab_lifecycle_unit_external)
+ tab_lifecycle_unit_external->SetAutoDiscardable(is_auto_discardable);
+ }
std::move(callback).Run();
}
- void DiscardById(int32_t tab_id,
+ void DiscardById(int32_t id,
bool urgent,
DiscardByIdCallback callback) override {
- resource_coordinator::TabManager* tab_manager =
- g_browser_process->GetTabManager();
- tab_manager->DiscardTabById(tab_id, GetDiscardReason(urgent));
+ auto* lifecycle_unit = GetLifecycleUnitById(id);
+ if (lifecycle_unit)
+ lifecycle_unit->Discard(GetDiscardReason(urgent));
std::move(callback).Run();
}
- void FreezeById(int32_t tab_id) override {
- resource_coordinator::TabManager* tab_manager =
- g_browser_process->GetTabManager();
- tab_manager->FreezeTabById(tab_id);
+ void FreezeById(int32_t id) override {
+ auto* lifecycle_unit = GetLifecycleUnitById(id);
+ if (lifecycle_unit)
+ lifecycle_unit->Freeze();
}
void Discard(bool urgent, DiscardCallback callback) override {
@@ -150,7 +168,7 @@ class DiscardsDetailsProviderImpl : public mojom::DiscardsDetailsProvider {
} // namespace
DiscardsUI::DiscardsUI(content::WebUI* web_ui)
- : ui::MojoWebUIController<mojom::DiscardsDetailsProvider>(web_ui) {
+ : ui::MojoWebUIController(web_ui) {
std::unique_ptr<content::WebUIDataSource> source(
content::WebUIDataSource::Create(chrome::kChromeUIDiscardsHost));
@@ -163,11 +181,14 @@ DiscardsUI::DiscardsUI(content::WebUI* web_ui)
Profile* profile = Profile::FromWebUI(web_ui);
content::WebUIDataSource::Add(profile, source.release());
+ AddHandlerToRegistry(base::BindRepeating(
+ &DiscardsUI::BindDiscardsDetailsProvider, base::Unretained(this)));
}
DiscardsUI::~DiscardsUI() {}
-void DiscardsUI::BindUIHandler(mojom::DiscardsDetailsProviderRequest request) {
+void DiscardsUI::BindDiscardsDetailsProvider(
+ mojom::DiscardsDetailsProviderRequest request) {
ui_handler_ =
std::make_unique<DiscardsDetailsProviderImpl>(std::move(request));
}