Commit 2c155a35 authored by Oksana Zhuravlova's avatar Oksana Zhuravlova Committed by Commit Bot

[BackgroundSync] init Android observer later

This change moves the initialization of
BackgroundSyncNetworkObserverAndroid to a later stage in the
BackgroundSyncManager startup. This avoids creating the
BackgroundSyncNetworkObserverAndroid::Observer instance
unnecessarily for WebView which does not support BackgroundSync.

Change-Id: I181ac886a336a4b32301a0b5790f1ed2963c4f2f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2052265Reviewed-by: default avatarBo <boliu@chromium.org>
Reviewed-by: default avatarMugdha Lakhani <nator@chromium.org>
Commit-Queue: Oksana Zhuravlova <oksamyt@chromium.org>
Cr-Commit-Position: refs/heads/master@{#741660}
parent 075ee27c
...@@ -22,10 +22,6 @@ BackgroundSyncNetworkObserverAndroid::Observer::Create( ...@@ -22,10 +22,6 @@ BackgroundSyncNetworkObserverAndroid::Observer::Create(
DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId());
scoped_refptr<BackgroundSyncNetworkObserverAndroid::Observer> observer( scoped_refptr<BackgroundSyncNetworkObserverAndroid::Observer> observer(
new BackgroundSyncNetworkObserverAndroid::Observer(callback)); new BackgroundSyncNetworkObserverAndroid::Observer(callback));
RunOrPostTaskOnThread(
FROM_HERE, BrowserThread::UI,
base::BindOnce(&BackgroundSyncNetworkObserverAndroid::Observer::Init,
observer));
return observer; return observer;
} }
...@@ -71,16 +67,27 @@ BackgroundSyncNetworkObserverAndroid::BackgroundSyncNetworkObserverAndroid( ...@@ -71,16 +67,27 @@ BackgroundSyncNetworkObserverAndroid::BackgroundSyncNetworkObserverAndroid(
base::RepeatingClosure network_changed_callback) base::RepeatingClosure network_changed_callback)
: BackgroundSyncNetworkObserver(std::move(network_changed_callback)) { : BackgroundSyncNetworkObserver(std::move(network_changed_callback)) {
DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId());
observer_ = Observer::Create(base::BindRepeating(
&BackgroundSyncNetworkObserverAndroid::OnConnectionChanged,
weak_ptr_factory_.GetWeakPtr()));
} }
BackgroundSyncNetworkObserverAndroid::~BackgroundSyncNetworkObserverAndroid() { BackgroundSyncNetworkObserverAndroid::~BackgroundSyncNetworkObserverAndroid() {
DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId());
} }
void BackgroundSyncNetworkObserverAndroid::Init() {
DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId());
observer_ = Observer::Create(base::BindRepeating(
&BackgroundSyncNetworkObserverAndroid::OnConnectionChanged,
weak_ptr_factory_.GetWeakPtr()));
if (ServiceWorkerContext::IsServiceWorkerOnUIEnabled()) {
observer_->Init();
} else {
RunOrPostTaskOnThread(
FROM_HERE, BrowserThread::UI,
base::BindOnce(&BackgroundSyncNetworkObserverAndroid::Observer::Init,
observer_));
}
}
void BackgroundSyncNetworkObserverAndroid::RegisterWithNetworkConnectionTracker( void BackgroundSyncNetworkObserverAndroid::RegisterWithNetworkConnectionTracker(
network::NetworkConnectionTracker* network_connection_tracker) {} network::NetworkConnectionTracker* network_connection_tracker) {}
......
...@@ -30,6 +30,9 @@ class BackgroundSyncNetworkObserverAndroid ...@@ -30,6 +30,9 @@ class BackgroundSyncNetworkObserverAndroid
~BackgroundSyncNetworkObserverAndroid() override; ~BackgroundSyncNetworkObserverAndroid() override;
// Creates and initializes the Observer (below) instance.
void Init() override;
// This class lives on the UI thread and mediates all access to the Java // This class lives on the UI thread and mediates all access to the Java
// BackgroundSyncNetworkObserver, which it creates and owns. It is in turn // BackgroundSyncNetworkObserver, which it creates and owns. It is in turn
// owned by the BackgroundSyncNetworkObserverAndroid. // owned by the BackgroundSyncNetworkObserverAndroid.
...@@ -39,6 +42,7 @@ class BackgroundSyncNetworkObserverAndroid ...@@ -39,6 +42,7 @@ class BackgroundSyncNetworkObserverAndroid
public: public:
static scoped_refptr<BackgroundSyncNetworkObserverAndroid::Observer> Create( static scoped_refptr<BackgroundSyncNetworkObserverAndroid::Observer> Create(
base::RepeatingCallback<void(network::mojom::ConnectionType)> callback); base::RepeatingCallback<void(network::mojom::ConnectionType)> callback);
void Init();
// Called from BackgroundSyncNetworkObserver.java over JNI whenever the // Called from BackgroundSyncNetworkObserver.java over JNI whenever the
// connection type changes. This updates the current connection type seen by // connection type changes. This updates the current connection type seen by
...@@ -56,7 +60,6 @@ class BackgroundSyncNetworkObserverAndroid ...@@ -56,7 +60,6 @@ class BackgroundSyncNetworkObserverAndroid
explicit Observer( explicit Observer(
base::RepeatingCallback<void(network::mojom::ConnectionType)> callback); base::RepeatingCallback<void(network::mojom::ConnectionType)> callback);
void Init();
~Observer(); ~Observer();
// This callback is to be run on the IO thread whenever the connection type // This callback is to be run on the IO thread whenever the connection type
...@@ -71,7 +74,8 @@ class BackgroundSyncNetworkObserverAndroid ...@@ -71,7 +74,8 @@ class BackgroundSyncNetworkObserverAndroid
void RegisterWithNetworkConnectionTracker( void RegisterWithNetworkConnectionTracker(
network::NetworkConnectionTracker* network_connection_tracker) override; network::NetworkConnectionTracker* network_connection_tracker) override;
// Accessed on UI Thread // Accessed on UI Thread.
// Null until Init() is called.
scoped_refptr<Observer> observer_; scoped_refptr<Observer> observer_;
base::WeakPtrFactory<BackgroundSyncNetworkObserverAndroid> weak_ptr_factory_{ base::WeakPtrFactory<BackgroundSyncNetworkObserverAndroid> weak_ptr_factory_{
......
...@@ -744,6 +744,8 @@ void BackgroundSyncManager::InitDidGetControllerParameters( ...@@ -744,6 +744,8 @@ void BackgroundSyncManager::InitDidGetControllerParameters(
return; return;
} }
network_observer_->Init();
GetDataFromBackend( GetDataFromBackend(
kBackgroundSyncUserDataKey, kBackgroundSyncUserDataKey,
base::BindOnce(&BackgroundSyncManager::InitDidGetDataFromBackend, base::BindOnce(&BackgroundSyncManager::InitDidGetDataFromBackend,
......
...@@ -24,6 +24,10 @@ class CONTENT_EXPORT BackgroundSyncNetworkObserver ...@@ -24,6 +24,10 @@ class CONTENT_EXPORT BackgroundSyncNetworkObserver
~BackgroundSyncNetworkObserver() override; ~BackgroundSyncNetworkObserver() override;
// Does nothing in this class, but can be overridden to do some work
// separately from the constructor.
virtual void Init() {}
// Enable or disable notifications coming from the NetworkConnectionTracker. // Enable or disable notifications coming from the NetworkConnectionTracker.
// (For preventing flakes in tests) // (For preventing flakes in tests)
static void SetIgnoreNetworkChangesForTests(bool ignore); static void SetIgnoreNetworkChangesForTests(bool ignore);
......
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