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