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)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_IMPORTER_IMPORTER_LIST_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_IMPORTER_IMPORTER_LIST_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/callback_forward.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_vector.h"
145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/memory/weak_ptr.h"
15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace importer {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct SourceProfile;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// ImporterList detects installed browsers and profiles via
225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// DetectSourceProfilesWorker(). ImporterList lives on the UI thread.
235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass ImporterList {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ImporterList();
265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  ~ImporterList();
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Detects the installed browsers and their associated profiles, then stores
295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // their information in a list to be accessed via count() and
305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // GetSourceProfileAt(). The detection runs asynchronously.
315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  //
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // |locale|: As in DetectSourceProfilesWorker().
335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // |include_interactive_profiles|: True to include source profiles that
345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // require user interaction to read.
355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // |profiles_loaded_callback|: Assuming this ImporterList instance is still
365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // alive, run the callback when the source profile detection finishes.
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void DetectSourceProfiles(const std::string& locale,
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                            bool include_interactive_profiles,
395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                            const base::Closure& profiles_loaded_callback);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the number of different source profiles you can import from.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  size_t count() const { return source_profiles_.size(); }
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the SourceProfile at |index|. The profiles are ordered such that
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the profile at index 0 is the likely default browser. The SourceProfile
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // should be passed to ImporterHost::StartImportSettings().
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const importer::SourceProfile& GetSourceProfileAt(size_t index) const;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Called when the source profiles are loaded. Takes ownership of the
515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // loaded profiles in |profiles| and calls |profiles_loaded_callback|.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SourceProfilesLoaded(
535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const base::Closure& profiles_loaded_callback,
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::vector<importer::SourceProfile*>& profiles);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The list of profiles with the default one first.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedVector<importer::SourceProfile> source_profiles_;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  base::WeakPtrFactory<ImporterList> weak_ptr_factory_;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ImporterList);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_IMPORTER_IMPORTER_LIST_H_
65