1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_IMPORTER_IE_IMPORTER_H_
6#define CHROME_BROWSER_IMPORTER_IE_IMPORTER_H_
7#pragma once
8
9#include <string>
10#include <vector>
11
12#include "base/basictypes.h"
13#include "base/compiler_specific.h"
14#include "base/gtest_prod_util.h"
15#include "base/file_path.h"
16#include "chrome/browser/importer/importer.h"
17#include "chrome/browser/importer/profile_writer.h"
18
19class IEImporter : public Importer {
20 public:
21  IEImporter();
22
23  // Importer:
24  virtual void StartImport(const importer::SourceProfile& source_profile,
25                           uint16 items,
26                           ImporterBridge* bridge) OVERRIDE;
27
28 private:
29  typedef std::vector<ProfileWriter::BookmarkEntry> BookmarkVector;
30
31  // A struct that hosts the information of IE Favorite folder.
32  struct FavoritesInfo {
33    FilePath path;
34    std::wstring links_folder;
35  };
36
37  // IE PStore subkey GUID: AutoComplete password & form data.
38  static const GUID kPStoreAutocompleteGUID;
39
40  // A fake GUID for unit test.
41  static const GUID kUnittestGUID;
42
43  FRIEND_TEST_ALL_PREFIXES(ImporterTest, IEImporter);
44
45  virtual ~IEImporter();
46
47  void ImportFavorites();
48
49  // Reads history information from COM interface.
50  void ImportHistory();
51
52  // Import password for IE6 stored in protected storage.
53  void ImportPasswordsIE6();
54
55  // Import password for IE7 and IE8 stored in Storage2.
56  void ImportPasswordsIE7();
57
58  void ImportSearchEngines();
59
60  // Import the homepage setting of IE. Note: IE supports multiple home pages,
61  // whereas Chrome doesn't, so we import only the one defined under the
62  // 'Start Page' registry key. We don't import if the homepage is set to the
63  // machine default.
64  void ImportHomepage();
65
66  // Resolves what's the .url file actually targets.
67  // Returns empty string if failed.
68  std::wstring ResolveInternetShortcut(const std::wstring& file);
69
70  // Gets the information of Favorites folder. Returns true if successful.
71  bool GetFavoritesInfo(FavoritesInfo* info);
72
73  // This function will read the files in the Favorite folder, and store
74  // the bookmark items in |bookmarks|.
75  void ParseFavoritesFolder(const FavoritesInfo& info,
76                            BookmarkVector* bookmarks);
77
78  // Determines which version of IE is in use.
79  int CurrentIEVersion() const;
80
81  // IE does not have source path. It's used in unit tests only for providing a
82  // fake source.
83  FilePath source_path_;
84
85  DISALLOW_COPY_AND_ASSIGN(IEImporter);
86};
87
88#endif  // CHROME_BROWSER_IMPORTER_IE_IMPORTER_H_
89