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