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)
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test/integration/apps_helper.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test/integration/extension_settings_helper.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test/integration/extensions_helper.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test/integration/sync_test.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using apps_helper::InstallAppForAllProfiles;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extension_settings_helper::AllExtensionSettingsSameAsVerifier;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extension_settings_helper::SetExtensionSettings;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extension_settings_helper::SetExtensionSettingsForAllProfiles;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions_helper::InstallExtensionForAllProfiles;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using sync_datatype_helper::test;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Generic mutations done after the initial setup of all tests. Note that
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// unfortuately we can't test existing configurations of the sync server since
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the tests don't support that.
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MutateSomeSettings(
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int seed, // used to modify the mutation values, not keys.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& extension0,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& extension1,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& extension2) {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Write to extension0 from profile 0 but not profile 1.
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::DictionaryValue settings;
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    settings.SetString("asdf", base::StringPrintf("asdfasdf-%d", seed));
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetExtensionSettings(test()->verifier(),    extension0, settings);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetExtensionSettings(test()->GetProfile(0), extension0, settings);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Write the same data to extension1 from both profiles.
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::DictionaryValue settings;
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    settings.SetString("asdf", base::StringPrintf("asdfasdf-%d", seed));
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    settings.SetString("qwer", base::StringPrintf("qwerqwer-%d", seed));
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetExtensionSettingsForAllProfiles(extension1, settings);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Write different data to extension2 from each profile.
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::DictionaryValue settings0;
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    settings0.SetString("zxcv", base::StringPrintf("zxcvzxcv-%d", seed));
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetExtensionSettings(test()->verifier(),    extension2, settings0);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetExtensionSettings(test()->GetProfile(0), extension2, settings0);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::DictionaryValue settings1;
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    settings1.SetString("1324", base::StringPrintf("12341234-%d", seed));
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    settings1.SetString("5687", base::StringPrintf("56785678-%d", seed));
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetExtensionSettings(test()->verifier(),    extension2, settings1);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetExtensionSettings(test()->GetProfile(1), extension2, settings1);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TwoClientExtensionSettingsAndAppSettingsSyncTest : public SyncTest {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TwoClientExtensionSettingsAndAppSettingsSyncTest() : SyncTest(TWO_CLIENT) {}
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~TwoClientExtensionSettingsAndAppSettingsSyncTest() {}
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TwoClientExtensionSettingsAndAppSettingsSyncTest);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// For three independent extensions:
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Set up each extension with the same (but not necessarily empty) settings for
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// all profiles, start syncing, add some new settings, sync, mutate those
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// settings, sync.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)testing::AssertionResult StartWithSameSettingsTest(
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& extension0,
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& extension1,
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& extension2) {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Leave extension0 empty.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::DictionaryValue settings;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    settings.SetString("foo", "bar");
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetExtensionSettingsForAllProfiles(extension1, settings);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::DictionaryValue settings;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    settings.SetString("foo", "bar");
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    settings.SetString("baz", "qux");
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetExtensionSettingsForAllProfiles(extension2, settings);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!test()->SetupSync())
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!test()->AwaitQuiescence())
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!AllExtensionSettingsSameAsVerifier())
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MutateSomeSettings(0, extension0, extension1, extension2);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!test()->AwaitQuiescence())
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!AllExtensionSettingsSameAsVerifier())
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MutateSomeSettings(1, extension0, extension1, extension2);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!test()->AwaitQuiescence())
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!AllExtensionSettingsSameAsVerifier())
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return testing::AssertionSuccess();
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// For three independent extensions:
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Set up each extension with different settings for each profile, start
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// syncing, add some settings, sync, mutate those settings, sync, have a no-op
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (non-)change to those settings, sync, mutate again, sync.
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)testing::AssertionResult StartWithDifferentSettingsTest(
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& extension0,
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& extension1,
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& extension2) {
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Leave extension0 empty again for no particular reason other than it's
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // the only remaining unique combination given the other 2 tests have
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // (empty, nonempty) and (nonempty, nonempty) configurations. We can't test
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // (nonempty, nonempty) because the merging will provide unpredictable
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // results, so test (empty, empty).
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::DictionaryValue settings;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    settings.SetString("foo", "bar");
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetExtensionSettings(test()->verifier(), extension1, settings);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetExtensionSettings(test()->GetProfile(0), extension1, settings);
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::DictionaryValue settings;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    settings.SetString("foo", "bar");
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    settings.SetString("baz", "qux");
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetExtensionSettings(test()->verifier(), extension2, settings);
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetExtensionSettings(test()->GetProfile(1), extension2, settings);
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!test()->SetupSync())
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!test()->AwaitQuiescence())
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!AllExtensionSettingsSameAsVerifier())
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MutateSomeSettings(2, extension0, extension1, extension2);
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!test()->AwaitQuiescence())
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!AllExtensionSettingsSameAsVerifier())
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MutateSomeSettings(3, extension0, extension1, extension2);
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!test()->AwaitQuiescence())
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!AllExtensionSettingsSameAsVerifier())
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test a round of no-ops once, for sanity. Ideally we'd want to assert that
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // this causes no sync activity, but that sounds tricky.
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MutateSomeSettings(3, extension0, extension1, extension2);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!test()->AwaitQuiescence())
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!AllExtensionSettingsSameAsVerifier())
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MutateSomeSettings(4, extension0, extension1, extension2);
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!test()->AwaitQuiescence())
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!AllExtensionSettingsSameAsVerifier())
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return testing::AssertionFailure();
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return testing::AssertionSuccess();
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientExtensionSettingsAndAppSettingsSyncTest,
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       ExtensionsStartWithSameSettings) {
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients());
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_PRED3(StartWithSameSettingsTest,
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InstallExtensionForAllProfiles(0),
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InstallExtensionForAllProfiles(1),
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InstallExtensionForAllProfiles(2)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  );
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientExtensionSettingsAndAppSettingsSyncTest,
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       AppsStartWithSameSettings) {
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients());
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_PRED3(StartWithSameSettingsTest,
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InstallAppForAllProfiles(0),
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InstallAppForAllProfiles(1),
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InstallAppForAllProfiles(2)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  );
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientExtensionSettingsAndAppSettingsSyncTest,
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       ExtensionsStartWithDifferentSettings) {
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients());
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_PRED3(StartWithDifferentSettingsTest,
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InstallExtensionForAllProfiles(0),
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InstallExtensionForAllProfiles(1),
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InstallExtensionForAllProfiles(2)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  );
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientExtensionSettingsAndAppSettingsSyncTest,
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       AppsStartWithDifferentSettings) {
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients());
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_PRED3(StartWithDifferentSettingsTest,
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InstallAppForAllProfiles(0),
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InstallAppForAllProfiles(1),
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InstallAppForAllProfiles(2)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  );
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
222