Commit d36c54bb authored by lgcheng's avatar lgcheng Committed by Commit Bot

Enable Arc Pacakge sync datatype at proper time.

We enable Arc package sync datatype when user enables Arc, and call
StartModels when Arc app instance is ready and Arc packages get
refreshed. But There is a big time gap since we need perform provision
for Arc during opt-in. And this may lead to the high config time-out
rate for Arc packages.

Enable the datatype when provision is successful and reduce the gap
between enabling the sync data type and calling startModels.

Bug: 771838
Test: Manual test and Arc pacakge related integration test.
Change-Id: I4c70c9d7e3c690fc953dac981398424d166ce51f
Reviewed-on: https://chromium-review.googlesource.com/702014Reviewed-by: default avatarPavel Yatsuk <pavely@chromium.org>
Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Commit-Queue: Long Cheng <lgcheng@google.com>
Cr-Commit-Position: refs/heads/master@{#506817}
parent 2b224083
...@@ -8,8 +8,6 @@ ...@@ -8,8 +8,6 @@
#include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/chromeos/arc/arc_util.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/app_list/arc/arc_app_list_prefs_factory.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs_factory.h"
#include "components/arc/arc_prefs.h"
#include "components/prefs/pref_service.h"
#include "components/sync/base/pref_names.h" #include "components/sync/base/pref_names.h"
#include "components/sync/base/sync_prefs.h" #include "components/sync/base/sync_prefs.h"
#include "components/sync/driver/sync_client.h" #include "components/sync/driver/sync_client.h"
...@@ -26,14 +24,15 @@ ArcPackageSyncDataTypeController::ArcPackageSyncDataTypeController( ...@@ -26,14 +24,15 @@ ArcPackageSyncDataTypeController::ArcPackageSyncDataTypeController(
syncer::GROUP_UI, syncer::GROUP_UI,
base::ThreadTaskRunnerHandle::Get()), base::ThreadTaskRunnerHandle::Get()),
profile_(profile) { profile_(profile) {
pref_registrar_.Init(profile_->GetPrefs()); arc::ArcSessionManager* arc_session_manager = arc::ArcSessionManager::Get();
pref_registrar_.Add( if (arc_session_manager)
arc::prefs::kArcEnabled, arc_session_manager->AddObserver(this);
base::Bind(&ArcPackageSyncDataTypeController::OnArcEnabledPrefChanged,
base::Unretained(this)));
} }
ArcPackageSyncDataTypeController::~ArcPackageSyncDataTypeController() { ArcPackageSyncDataTypeController::~ArcPackageSyncDataTypeController() {
arc::ArcSessionManager* arc_session_manager = arc::ArcSessionManager::Get();
if (arc_session_manager)
arc_session_manager->RemoveObserver(this);
} }
bool ArcPackageSyncDataTypeController::ReadyForStart() const { bool ArcPackageSyncDataTypeController::ReadyForStart() const {
...@@ -72,21 +71,25 @@ void ArcPackageSyncDataTypeController::OnPackageListInitialRefreshed() { ...@@ -72,21 +71,25 @@ void ArcPackageSyncDataTypeController::OnPackageListInitialRefreshed() {
OnModelLoaded(); OnModelLoaded();
} }
void ArcPackageSyncDataTypeController::OnArcEnabledPrefChanged() { void ArcPackageSyncDataTypeController::OnArcPlayStoreEnabledChanged(
bool enabled) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
if (!ReadyForStart()) { // Delay enabling DTC until ARC successfully signed in.
if (ReadyForStart())
return;
// If enable ARC in settings is turned off then generate an unrecoverable // If enable ARC in settings is turned off then generate an unrecoverable
// error. // error.
if (state() != NOT_RUNNING && state() != STOPPING) { if (state() != NOT_RUNNING && state() != STOPPING) {
syncer::SyncError error( syncer::SyncError error(
FROM_HERE, syncer::SyncError::DATATYPE_POLICY_ERROR, FROM_HERE, syncer::SyncError::DATATYPE_POLICY_ERROR,
"ARC package sync is now disabled because user disables ARC.", "ARC package sync is now disabled because user disables ARC.", type());
type());
CreateErrorHandler()->OnUnrecoverableError(error); CreateErrorHandler()->OnUnrecoverableError(error);
} }
return; }
}
void ArcPackageSyncDataTypeController::OnArcInitialStart() {
EnableDataType(); EnableDataType();
} }
......
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
#define CHROME_BROWSER_UI_APP_LIST_ARC_ARC_PACKAGE_SYNC_DATA_TYPE_CONTROLLER_H_ #define CHROME_BROWSER_UI_APP_LIST_ARC_ARC_PACKAGE_SYNC_DATA_TYPE_CONTROLLER_H_
#include "base/macros.h" #include "base/macros.h"
#include "chrome/browser/chromeos/arc/arc_session_manager.h"
#include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
#include "components/prefs/pref_change_registrar.h"
#include "components/sync/driver/async_directory_type_controller.h" #include "components/sync/driver/async_directory_type_controller.h"
#include "components/sync/driver/data_type_controller.h" #include "components/sync/driver/data_type_controller.h"
...@@ -21,7 +21,8 @@ class SyncClient; ...@@ -21,7 +21,8 @@ class SyncClient;
// disables these types based on whether ArcAppInstance is ready. // disables these types based on whether ArcAppInstance is ready.
class ArcPackageSyncDataTypeController class ArcPackageSyncDataTypeController
: public syncer::AsyncDirectoryTypeController, : public syncer::AsyncDirectoryTypeController,
public ArcAppListPrefs::Observer { public ArcAppListPrefs::Observer,
public arc::ArcSessionManager::Observer {
public: public:
// |dump_stack| is called when an unrecoverable error occurs. // |dump_stack| is called when an unrecoverable error occurs.
ArcPackageSyncDataTypeController(syncer::ModelType type, ArcPackageSyncDataTypeController(syncer::ModelType type,
...@@ -39,18 +40,19 @@ class ArcPackageSyncDataTypeController ...@@ -39,18 +40,19 @@ class ArcPackageSyncDataTypeController
// ArcAppListPrefs::Observer: // ArcAppListPrefs::Observer:
void OnPackageListInitialRefreshed() override; void OnPackageListInitialRefreshed() override;
void OnArcEnabledPrefChanged(); // ArcSessionManager::Observer:
void OnArcPlayStoreEnabledChanged(bool enabled) override;
void OnArcInitialStart() override;
void EnableDataType(); void EnableDataType();
// Returns true if user enables app sync.
bool ShouldSyncArc() const; bool ShouldSyncArc() const;
bool model_normal_start_ = true; bool model_normal_start_ = true;
Profile* const profile_; Profile* const profile_;
PrefChangeRegistrar pref_registrar_;
DISALLOW_COPY_AND_ASSIGN(ArcPackageSyncDataTypeController); DISALLOW_COPY_AND_ASSIGN(ArcPackageSyncDataTypeController);
}; };
#endif // CHROME_BROWSER_UI_APP_LIST_ARC_ARC_PACKAGE_SYNC_DATA_TYPE_CONTROLLER_H_ #endif // CHROME_BROWSER_UI_APP_LIST_ARC_ARC_PACKAGE_SYNC_DATA_TYPE_CONTROLLER_H_
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