Commit 3f522034 authored by Eric Willigers's avatar Eric Willigers Committed by Commit Bot

Desktop PWA window tabs are not discarded

Web app windows, including 'Open in window' shortcuts, do not have
their tabs discarded.

Bug: 1041743
Change-Id: I4f055fb470d484896f0eba059f0525cef41aa75c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1999896
Commit-Queue: Steven Holte <holte@chromium.org>
Reviewed-by: default avatarSteven Holte <holte@chromium.org>
Reviewed-by: default avatarFrançois Doray <fdoray@chromium.org>
Auto-Submit: Eric Willigers <ericwilligers@chromium.org>
Cr-Commit-Position: refs/heads/master@{#733030}
parent f7a90124
......@@ -38,6 +38,7 @@ const char* kDecisionFailureReasonStrings[] = {
"Tab is currently holding a WebLock",
"Tab is currently holding an IndexedDB lock",
"Tab has notification permission ",
"Tab is a web application window",
};
static_assert(base::size(kDecisionFailureReasonStrings) ==
static_cast<size_t>(DecisionFailureReason::MAX),
......@@ -148,6 +149,9 @@ void PopulateFailureReason(
case DecisionFailureReason::LIVE_STATE_HAS_NOTIFICATIONS_PERMISSION:
ukm->SetFailureLiveStateHasNotificationsPermission(1);
break;
case DecisionFailureReason::LIVE_WEB_APP:
ukm->SetFailureLiveWebApp(1);
break;
case DecisionFailureReason::MAX:
NOTREACHED();
break;
......
......@@ -86,6 +86,8 @@ enum class DecisionFailureReason : int32_t {
// The tab is opted out of the intervention as it has the permission to use
// notifications.
LIVE_STATE_HAS_NOTIFICATIONS_PERMISSION,
// The tab is a standalone desktop PWA window.
LIVE_WEB_APP,
// This must remain last.
MAX,
};
......
......@@ -33,6 +33,8 @@
#include "chrome/browser/tab_contents/form_interaction_tab_helper.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/usb/usb_tab_helper.h"
#include "chrome/browser/web_applications/components/web_app_ui_manager.h"
#include "chrome/browser/web_applications/web_app_provider.h"
#include "components/device_event_log/device_event_log.h"
#include "components/performance_manager/public/decorators/page_live_state_decorator.h"
#include "content/public/browser/navigation_controller.h"
......@@ -673,6 +675,14 @@ bool TabLifecycleUnitSource::TabLifecycleUnit::CanDiscard(
DecisionFailureReason::LIVE_STATE_DEVTOOLS_OPEN);
}
web_app::WebAppProvider* web_app_provider =
web_app::WebAppProvider::GetForWebContents(web_contents());
if (web_app_provider &&
web_app_provider->ui_manager().IsInAppWindow(web_contents())) {
// Do not discard Desktop PWA windows. Preserve native-app experience.
decision_details->AddReason(DecisionFailureReason::LIVE_WEB_APP);
}
if (decision_details->reasons().empty()) {
decision_details->AddReason(
DecisionSuccessReason::HEURISTIC_OBSERVED_TO_BE_SAFE);
......
......@@ -9190,6 +9190,12 @@ be describing additional metrics about the same event.
currently visible.
</summary>
</metric>
<metric name="FailureLiveWebApp" enum="Boolean">
<summary>
Boolean indicating that the intervention was disallowed because the tab is
a web application window.
</summary>
</metric>
<metric name="FailureOriginTrialOptOut" enum="Boolean">
<summary>
Boolean indicating that the tab explicitly opted out of the intervention
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment