15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test/integration/apps_helper.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test/integration/sync_app_helper.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test/integration/sync_extension_helper.h"
133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "extensions/common/manifest.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using sync_datatype_helper::test;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string CreateFakeAppName(int index) {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return "fakeapp" + base::IntToString(index);
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace apps_helper {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool HasSameAppsAsVerifier(int index) {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return SyncAppHelper::GetInstance()->AppStatesMatch(
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      test()->GetProfile(index), test()->verifier());
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool AllProfilesHaveSameAppsAsVerifier() {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < test()->num_clients(); ++i) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!HasSameAppsAsVerifier(i)) {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      LOG(ERROR) << "Profile " << i << " doesn't have the same apps as the"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       " verifier profile.";
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return false;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string InstallApp(Profile* profile, int index) {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return SyncExtensionHelper::GetInstance()->InstallExtension(
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      profile,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CreateFakeAppName(index),
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      extensions::Manifest::TYPE_HOSTED_APP);
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string InstallPlatformApp(Profile* profile, int index) {
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return SyncExtensionHelper::GetInstance()->InstallExtension(
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      profile,
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CreateFakeAppName(index),
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      extensions::Manifest::TYPE_PLATFORM_APP);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string InstallAppForAllProfiles(int index) {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < test()->num_clients(); ++i)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InstallApp(test()->GetProfile(i), index);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return InstallApp(test()->verifier(), index);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UninstallApp(Profile* profile, int index) {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return SyncExtensionHelper::GetInstance()->UninstallExtension(
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      profile, CreateFakeAppName(index));
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void EnableApp(Profile* profile, int index) {
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return SyncExtensionHelper::GetInstance()->EnableExtension(
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      profile, CreateFakeAppName(index));
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void DisableApp(Profile* profile, int index) {
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return SyncExtensionHelper::GetInstance()->DisableExtension(
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      profile, CreateFakeAppName(index));
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void IncognitoEnableApp(Profile* profile, int index) {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return SyncExtensionHelper::GetInstance()->IncognitoEnableExtension(
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      profile, CreateFakeAppName(index));
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void IncognitoDisableApp(Profile* profile, int index) {
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return SyncExtensionHelper::GetInstance()->IncognitoDisableExtension(
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      profile, CreateFakeAppName(index));
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InstallAppsPendingForSync(Profile* profile) {
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SyncExtensionHelper::GetInstance()->InstallExtensionsPendingForSync(profile);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)syncer::StringOrdinal GetPageOrdinalForApp(Profile* profile,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           int app_index) {
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return SyncAppHelper::GetInstance()->GetPageOrdinalForApp(
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      profile, CreateFakeAppName(app_index));
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetPageOrdinalForApp(Profile* profile,
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          int app_index,
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const syncer::StringOrdinal& page_ordinal) {
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SyncAppHelper::GetInstance()->SetPageOrdinalForApp(
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      profile, CreateFakeAppName(app_index), page_ordinal);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)syncer::StringOrdinal GetAppLaunchOrdinalForApp(Profile* profile,
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                int app_index) {
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return SyncAppHelper::GetInstance()->GetAppLaunchOrdinalForApp(
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      profile, CreateFakeAppName(app_index));
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetAppLaunchOrdinalForApp(
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Profile* profile,
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int app_index,
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const syncer::StringOrdinal& app_launch_ordinal) {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SyncAppHelper::GetInstance()->SetAppLaunchOrdinalForApp(
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      profile, CreateFakeAppName(app_index), app_launch_ordinal);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CopyNTPOrdinals(Profile* source, Profile* destination, int index) {
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetPageOrdinalForApp(destination, index, GetPageOrdinalForApp(source, index));
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetAppLaunchOrdinalForApp(
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      destination, index, GetAppLaunchOrdinalForApp(source, index));
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FixNTPOrdinalCollisions(Profile* profile) {
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SyncAppHelper::GetInstance()->FixNTPOrdinalCollisions(profile);
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace apps_helper
130