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)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions {
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SyncSetupHelper {
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SyncSetupHelper();
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ~SyncSetupHelper();
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Performs one-time initialization to enable sync for a profile. Does nothing
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // if sync is already enabled for the profile.
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool InitializeSync(Profile* profile);
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Helper method used to read GAIA credentials from a local password file.
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Note: The password file must be a plain text file with two lines.
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The username is on the first line and the password is on the second line.
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool ReadPasswordFile(const base::FilePath& passwordFile);
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::string& client_id() const { return client_id_; }
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::string& client_secret() const { return client_secret_; }
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::string& refresh_token() const { return refresh_token_; }
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Block until all sync clients have completed their mutual sync cycles.
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Return true if a quiescent state was successfully reached.
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool AwaitQuiescence();
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // GAIA account used by the test case.
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string username_;
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // GAIA password used by the test case.
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string password_;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // GAIA client id for making the API call to push messaging.
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string client_id_;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // GAIA client secret for making the API call to push messaging.
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string client_secret_;
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // GAIA refresh token for making the API call to push messaging.
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string refresh_token_;
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The sync profile used by a test. The profile is owned by the
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // ProfileManager.
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Profile* profile_;
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Sync client used by a test. A sync client is associated with
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // a sync profile, and implements methods that sync the contents of the
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // profile with the server.
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ProfileSyncServiceHarness> client_;
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This test needs to make live DNS requests for access to
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // GAIA and sync server URLs under google.com. We use a scoped version
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // to override the default resolver while the test is active.
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<net::ScopedDefaultHostResolverProc> mock_host_resolver_override_;
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SyncSetupHelper);
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace extensions
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CHROME_BROWSER_EXTENSIONS_API_PUSH_MESSAGING_SYNC_SETUP_HELPER_H_
79