-
Notifications
You must be signed in to change notification settings - Fork 6.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[iOS] Adds
IOS.TabPickup.TimeSinceLastCrossDeviceSync
metric
We want to record this metric in M116 before implementing the TabPickup feature. To record it, a light TabPickupBrowserAgent is created. This browser agent will be implemented in subsequent CLs. (cherry picked from commit a1ff9d096cfebaf6e3aaf86822f621d9fcf4e3ec) Bug: 1456732 Change-Id: Ie1fface8eb9c1255234243bfc7b8705313079ef6 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4629693 Reviewed-by: Olivier Robin <olivierrobin@chromium.org> Reviewed-by: Christian Xu <christianxu@chromium.org> Reviewed-by: Gauthier Ambard <gambard@chromium.org> Commit-Queue: Ewann Pellé <ewannpv@chromium.org> Cr-Original-Commit-Position: refs/heads/main@{#1161713} Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4638064 Cr-Commit-Position: refs/branch-heads/5845@{#85} Cr-Branched-From: 5a5dff6-refs/heads/main@{#1160321}
- Loading branch information
Ewann Pelle
authored and
Chromium LUCI CQ
committed
Jun 26, 2023
1 parent
67db02e
commit 626b057
Showing
6 changed files
with
171 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
# Copyright 2023 The Chromium Authors | ||
# Use of this source code is governed by a BSD-style license that can be | ||
# found in the LICENSE file. | ||
|
||
source_set("tab_pickup") { | ||
configs += [ "//build/config/compiler:enable_arc" ] | ||
sources = [ | ||
"tab_pickup_browser_agent.h", | ||
"tab_pickup_browser_agent.mm", | ||
] | ||
deps = [ | ||
"//base", | ||
"//components/sync_sessions", | ||
"//ios/chrome/browser/shared/model/browser", | ||
"//ios/chrome/browser/shared/model/browser_state", | ||
"//ios/chrome/browser/shared/model/web_state_list", | ||
"//ios/chrome/browser/sync", | ||
"//ios/chrome/browser/synced_sessions", | ||
] | ||
} |
50 changes: 50 additions & 0 deletions
50
ios/chrome/browser/tabs/tab_pickup/tab_pickup_browser_agent.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
// Copyright 2023 The Chromium Authors | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
#ifndef IOS_CHROME_BROWSER_TABS_TAB_PICKUP_TAB_PICKUP_BROWSER_AGENT_H_ | ||
#define IOS_CHROME_BROWSER_TABS_TAB_PICKUP_TAB_PICKUP_BROWSER_AGENT_H_ | ||
|
||
#import "base/callback_list.h" | ||
#import "ios/chrome/browser/shared/model/browser/browser_observer.h" | ||
#import "ios/chrome/browser/shared/model/browser/browser_user_data.h" | ||
|
||
class Browser; | ||
|
||
namespace sync_sessions { | ||
class SessionSyncService; | ||
} | ||
|
||
// Service that creates/replaces tab pickup infobar. | ||
class TabPickupBrowserAgent : public BrowserObserver, | ||
public BrowserUserData<TabPickupBrowserAgent> { | ||
public: | ||
TabPickupBrowserAgent(const TabPickupBrowserAgent&) = delete; | ||
TabPickupBrowserAgent& operator=(const TabPickupBrowserAgent&) = delete; | ||
~TabPickupBrowserAgent() override; | ||
|
||
private: | ||
friend class BrowserUserData<TabPickupBrowserAgent>; | ||
BROWSER_USER_DATA_KEY_DECL(); | ||
|
||
explicit TabPickupBrowserAgent(Browser* browser); | ||
|
||
// Called when foreign sessions change. | ||
void ForeignSessionsChanged(); | ||
|
||
// BrowserObserver methods. | ||
void BrowserDestroyed(Browser* browser) override; | ||
|
||
// The owning Browser. | ||
raw_ptr<Browser> browser_ = nullptr; | ||
// KeyedService responsible session sync. | ||
raw_ptr<sync_sessions::SessionSyncService> session_sync_service_ = nullptr; | ||
// CallbackListSubscription for the SessionSyncService method. | ||
base::CallbackListSubscription foreign_session_updated_subscription_; | ||
|
||
// Tracks if the `IOS.TabPickup.TimeSinceLastCrossDeviceSync` metric has been | ||
// recorded. | ||
static bool transition_time_metric_recorded; | ||
}; | ||
|
||
#endif // IOS_CHROME_BROWSER_TABS_TAB_PICKUP_TAB_PICKUP_BROWSER_AGENT_H_ |
68 changes: 68 additions & 0 deletions
68
ios/chrome/browser/tabs/tab_pickup/tab_pickup_browser_agent.mm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
// Copyright 2023 The Chromium Authors | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
#import "ios/chrome/browser/tabs/tab_pickup/tab_pickup_browser_agent.h" | ||
|
||
#import "base/metrics/histogram_functions.h" | ||
#import "components/sync_sessions/session_sync_service.h" | ||
#import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" | ||
#import "ios/chrome/browser/shared/model/web_state_list/web_state_list.h" | ||
#import "ios/chrome/browser/sync/session_sync_service_factory.h" | ||
#import "ios/chrome/browser/synced_sessions/distant_session.h" | ||
#import "ios/chrome/browser/synced_sessions/synced_sessions.h" | ||
|
||
#if !defined(__has_feature) || !__has_feature(objc_arc) | ||
#error "This file requires ARC support." | ||
#endif | ||
|
||
BROWSER_USER_DATA_KEY_IMPL(TabPickupBrowserAgent) | ||
|
||
bool TabPickupBrowserAgent::transition_time_metric_recorded = false; | ||
|
||
TabPickupBrowserAgent::TabPickupBrowserAgent(Browser* browser) | ||
: browser_(browser), | ||
session_sync_service_(SessionSyncServiceFactory::GetForBrowserState( | ||
browser_->GetBrowserState())) { | ||
browser_->AddObserver(this); | ||
|
||
// base::Unretained() is safe below because the subscription itself is a class | ||
// member field and handles destruction well. | ||
foreign_session_updated_subscription_ = | ||
session_sync_service_->SubscribeToForeignSessionsChanged( | ||
base::BindRepeating(&TabPickupBrowserAgent::ForeignSessionsChanged, | ||
base::Unretained(this))); | ||
} | ||
|
||
TabPickupBrowserAgent::~TabPickupBrowserAgent() { | ||
DCHECK(!browser_); | ||
} | ||
|
||
#pragma mark - BrowserObserver | ||
|
||
void TabPickupBrowserAgent::BrowserDestroyed(Browser* browser) { | ||
DCHECK_EQ(browser, browser_); | ||
browser->RemoveObserver(this); | ||
browser_ = nullptr; | ||
} | ||
|
||
#pragma mark - Private methods | ||
|
||
void TabPickupBrowserAgent::ForeignSessionsChanged() { | ||
if (transition_time_metric_recorded) { | ||
return; | ||
} | ||
|
||
auto const synced_sessions = | ||
std::make_unique<synced_sessions::SyncedSessions>(session_sync_service_); | ||
if (synced_sessions->GetSessionCount()) { | ||
transition_time_metric_recorded = true; | ||
const synced_sessions::DistantSession* session = | ||
synced_sessions->GetSession(0); | ||
const base::TimeDelta time_since_last_sync = | ||
base::Time::Now() - session->modified_time; | ||
base::UmaHistogramCustomTimes("IOS.TabPickup.TimeSinceLastCrossDeviceSync", | ||
time_since_last_sync, base::Minutes(1), | ||
base::Days(24), 50); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters