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