12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_API_PUSH_MESSAGING_SYNC_SETUP_HELPER_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_API_PUSH_MESSAGING_SYNC_SETUP_HELPER_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/compiler_specific.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/dns/mock_host_resolver.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Profile; 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ProfileSyncServiceHarness; 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace base { 19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass FilePath; 20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SyncSetupHelper { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SyncSetupHelper(); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~SyncSetupHelper(); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Performs one-time initialization to enable sync for a profile. Does nothing 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // if sync is already enabled for the profile. 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool InitializeSync(Profile* profile); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Helper method used to read GAIA credentials from a local password file. 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note: The password file must be a plain text file with two lines. 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The username is on the first line and the password is on the second line. 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool ReadPasswordFile(const base::FilePath& passwordFile); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& client_id() const { return client_id_; } 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& client_secret() const { return client_secret_; } 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& refresh_token() const { return refresh_token_; } 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Block until all sync clients have completed their mutual sync cycles. 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Return true if a quiescent state was successfully reached. 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool AwaitQuiescence(); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // GAIA account used by the test case. 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string username_; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // GAIA password used by the test case. 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string password_; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // GAIA client id for making the API call to push messaging. 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string client_id_; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // GAIA client secret for making the API call to push messaging. 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string client_secret_; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // GAIA refresh token for making the API call to push messaging. 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string refresh_token_; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The sync profile used by a test. The profile is owned by the 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ProfileManager. 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile_; 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sync client used by a test. A sync client is associated with 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // a sync profile, and implements methods that sync the contents of the 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // profile with the server. 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ProfileSyncServiceHarness> client_; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This test needs to make live DNS requests for access to 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // GAIA and sync server URLs under google.com. We use a scoped version 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // to override the default resolver while the test is active. 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<net::ScopedDefaultHostResolverProc> mock_host_resolver_override_; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SyncSetupHelper); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace extensions 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CHROME_BROWSER_EXTENSIONS_API_PUSH_MESSAGING_SYNC_SETUP_HELPER_H_ 83