| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/importer/importer_list.h" | 5 #include "chrome/browser/importer/importer_list.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "chrome/browser/shell_integration.h" | 8 #include "chrome/browser/shell_integration.h" |
| 9 #include "chrome/common/importer/firefox_importer_utils.h" | 9 #include "chrome/common/importer/firefox_importer_utils.h" |
| 10 #include "chrome/common/importer/importer_bridge.h" | 10 #include "chrome/common/importer/importer_bridge.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 | 22 |
| 23 #if defined(OS_WIN) | 23 #if defined(OS_WIN) |
| 24 #include "chrome/common/importer/edge_importer_utils_win.h" | 24 #include "chrome/common/importer/edge_importer_utils_win.h" |
| 25 #endif | 25 #endif |
| 26 | 26 |
| 27 using content::BrowserThread; | 27 using content::BrowserThread; |
| 28 | 28 |
| 29 namespace { | 29 namespace { |
| 30 | 30 |
| 31 #if defined(OS_WIN) | 31 #if defined(OS_WIN) |
| 32 void DetectIEProfiles(std::vector<importer::SourceProfile*>* profiles) { | 32 void DetectIEProfiles(std::vector<importer::SourceProfile>* profiles) { |
| 33 DCHECK_CURRENTLY_ON(BrowserThread::FILE); | 33 DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| 34 // IE always exists and doesn't have multiple profiles. | 34 // IE always exists and doesn't have multiple profiles. |
| 35 importer::SourceProfile* ie = new importer::SourceProfile; | 35 importer::SourceProfile ie; |
| 36 ie->importer_name = l10n_util::GetStringUTF16(IDS_IMPORT_FROM_IE); | 36 ie.importer_name = l10n_util::GetStringUTF16(IDS_IMPORT_FROM_IE); |
| 37 ie->importer_type = importer::TYPE_IE; | 37 ie.importer_type = importer::TYPE_IE; |
| 38 ie->source_path.clear(); | 38 ie.services_supported = importer::HISTORY | importer::FAVORITES | |
| 39 ie->app_path.clear(); | 39 importer::COOKIES | importer::PASSWORDS | |
| 40 ie->services_supported = importer::HISTORY | importer::FAVORITES | | 40 importer::SEARCH_ENGINES; |
| 41 importer::COOKIES | importer::PASSWORDS | importer::SEARCH_ENGINES; | |
| 42 profiles->push_back(ie); | 41 profiles->push_back(ie); |
| 43 } | 42 } |
| 44 | 43 |
| 45 void DetectEdgeProfiles(std::vector<importer::SourceProfile*>* profiles) { | 44 void DetectEdgeProfiles(std::vector<importer::SourceProfile>* profiles) { |
| 46 importer::SourceProfile* edge = new importer::SourceProfile; | 45 importer::SourceProfile edge; |
| 47 edge->importer_name = l10n_util::GetStringUTF16(IDS_IMPORT_FROM_EDGE); | 46 edge.importer_name = l10n_util::GetStringUTF16(IDS_IMPORT_FROM_EDGE); |
| 48 edge->importer_type = importer::TYPE_EDGE; | 47 edge.importer_type = importer::TYPE_EDGE; |
| 49 edge->services_supported = importer::FAVORITES; | 48 edge.services_supported = importer::FAVORITES; |
| 50 edge->source_path = importer::GetEdgeDataFilePath(); | 49 edge.source_path = importer::GetEdgeDataFilePath(); |
| 51 profiles->push_back(edge); | 50 profiles->push_back(edge); |
| 52 } | 51 } |
| 53 | 52 |
| 54 void DetectBuiltinWindowsProfiles( | 53 void DetectBuiltinWindowsProfiles( |
| 55 std::vector<importer::SourceProfile*>* profiles) { | 54 std::vector<importer::SourceProfile>* profiles) { |
| 56 // Make the assumption on Windows 10 that Edge exists and is probably default. | 55 // Make the assumption on Windows 10 that Edge exists and is probably default. |
| 57 if (importer::EdgeImporterCanImport()) | 56 if (importer::EdgeImporterCanImport()) |
| 58 DetectEdgeProfiles(profiles); | 57 DetectEdgeProfiles(profiles); |
| 59 DetectIEProfiles(profiles); | 58 DetectIEProfiles(profiles); |
| 60 } | 59 } |
| 61 | 60 |
| 62 #endif // defined(OS_WIN) | 61 #endif // defined(OS_WIN) |
| 63 | 62 |
| 64 #if defined(OS_MACOSX) | 63 #if defined(OS_MACOSX) |
| 65 void DetectSafariProfiles(std::vector<importer::SourceProfile*>* profiles) { | 64 void DetectSafariProfiles(std::vector<importer::SourceProfile>* profiles) { |
| 66 DCHECK_CURRENTLY_ON(BrowserThread::FILE); | 65 DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| 67 uint16 items = importer::NONE; | 66 uint16 items = importer::NONE; |
| 68 if (!SafariImporterCanImport(base::mac::GetUserLibraryPath(), &items)) | 67 if (!SafariImporterCanImport(base::mac::GetUserLibraryPath(), &items)) |
| 69 return; | 68 return; |
| 70 | 69 |
| 71 importer::SourceProfile* safari = new importer::SourceProfile; | 70 importer::SourceProfile safari; |
| 72 safari->importer_name = l10n_util::GetStringUTF16(IDS_IMPORT_FROM_SAFARI); | 71 safari.importer_name = l10n_util::GetStringUTF16(IDS_IMPORT_FROM_SAFARI); |
| 73 safari->importer_type = importer::TYPE_SAFARI; | 72 safari.importer_type = importer::TYPE_SAFARI; |
| 74 safari->source_path.clear(); | 73 safari.services_supported = items; |
| 75 safari->app_path.clear(); | |
| 76 safari->services_supported = items; | |
| 77 profiles->push_back(safari); | 74 profiles->push_back(safari); |
| 78 } | 75 } |
| 79 #endif // defined(OS_MACOSX) | 76 #endif // defined(OS_MACOSX) |
| 80 | 77 |
| 81 // |locale|: The application locale used for lookups in Firefox's | 78 // |locale|: The application locale used for lookups in Firefox's |
| 82 // locale-specific search engines feature (see firefox_importer.cc for | 79 // locale-specific search engines feature (see firefox_importer.cc for |
| 83 // details). | 80 // details). |
| 84 void DetectFirefoxProfiles(const std::string locale, | 81 void DetectFirefoxProfiles(const std::string locale, |
| 85 std::vector<importer::SourceProfile*>* profiles) { | 82 std::vector<importer::SourceProfile>* profiles) { |
| 86 DCHECK_CURRENTLY_ON(BrowserThread::FILE); | 83 DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| 87 base::FilePath profile_path = GetFirefoxProfilePath(); | 84 base::FilePath profile_path = GetFirefoxProfilePath(); |
| 88 if (profile_path.empty()) | 85 if (profile_path.empty()) |
| 89 return; | 86 return; |
| 90 | 87 |
| 91 // Detects which version of Firefox is installed. | 88 // Detects which version of Firefox is installed. |
| 92 importer::ImporterType firefox_type; | 89 importer::ImporterType firefox_type; |
| 93 base::FilePath app_path; | 90 base::FilePath app_path; |
| 94 int version = 0; | 91 int version = 0; |
| 95 #if defined(OS_WIN) | 92 #if defined(OS_WIN) |
| 96 version = GetCurrentFirefoxMajorVersionFromRegistry(); | 93 version = GetCurrentFirefoxMajorVersionFromRegistry(); |
| 97 #endif | 94 #endif |
| 98 if (version < 2) | 95 if (version < 2) |
| 99 GetFirefoxVersionAndPathFromProfile(profile_path, &version, &app_path); | 96 GetFirefoxVersionAndPathFromProfile(profile_path, &version, &app_path); |
| 100 | 97 |
| 101 if (version >= 3) { | 98 if (version >= 3) { |
| 102 firefox_type = importer::TYPE_FIREFOX; | 99 firefox_type = importer::TYPE_FIREFOX; |
| 103 } else { | 100 } else { |
| 104 // Ignores old versions of firefox. | 101 // Ignores old versions of firefox. |
| 105 return; | 102 return; |
| 106 } | 103 } |
| 107 | 104 |
| 108 importer::SourceProfile* firefox = new importer::SourceProfile; | 105 importer::SourceProfile firefox; |
| 109 firefox->importer_name = GetFirefoxImporterName(app_path); | 106 firefox.importer_name = GetFirefoxImporterName(app_path); |
| 110 firefox->importer_type = firefox_type; | 107 firefox.importer_type = firefox_type; |
| 111 firefox->source_path = profile_path; | 108 firefox.source_path = profile_path; |
| 112 #if defined(OS_WIN) | 109 #if defined(OS_WIN) |
| 113 firefox->app_path = GetFirefoxInstallPathFromRegistry(); | 110 firefox.app_path = GetFirefoxInstallPathFromRegistry(); |
| 114 #endif | 111 #endif |
| 115 if (firefox->app_path.empty()) | 112 if (firefox.app_path.empty()) |
| 116 firefox->app_path = app_path; | 113 firefox.app_path = app_path; |
| 117 firefox->services_supported = importer::HISTORY | importer::FAVORITES | | 114 firefox.services_supported = importer::HISTORY | importer::FAVORITES | |
| 118 importer::PASSWORDS | importer::SEARCH_ENGINES | | 115 importer::PASSWORDS | importer::SEARCH_ENGINES | |
| 119 importer::AUTOFILL_FORM_DATA; | 116 importer::AUTOFILL_FORM_DATA; |
| 120 firefox->locale = locale; | 117 firefox.locale = locale; |
| 121 profiles->push_back(firefox); | 118 profiles->push_back(firefox); |
| 122 } | 119 } |
| 123 | 120 |
| 124 std::vector<importer::SourceProfile*> DetectSourceProfilesWorker( | 121 std::vector<importer::SourceProfile> DetectSourceProfilesWorker( |
| 125 const std::string& locale, | 122 const std::string& locale, |
| 126 bool include_interactive_profiles) { | 123 bool include_interactive_profiles) { |
| 127 DCHECK_CURRENTLY_ON(BrowserThread::FILE); | 124 DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| 128 | 125 |
| 129 std::vector<importer::SourceProfile*> profiles; | 126 std::vector<importer::SourceProfile> profiles; |
| 130 | 127 |
| 131 // The first run import will automatically take settings from the first | 128 // The first run import will automatically take settings from the first |
| 132 // profile detected, which should be the user's current default. | 129 // profile detected, which should be the user's current default. |
| 133 #if defined(OS_WIN) | 130 #if defined(OS_WIN) |
| 134 if (ShellIntegration::IsFirefoxDefaultBrowser()) { | 131 if (ShellIntegration::IsFirefoxDefaultBrowser()) { |
| 135 DetectFirefoxProfiles(locale, &profiles); | 132 DetectFirefoxProfiles(locale, &profiles); |
| 136 DetectBuiltinWindowsProfiles(&profiles); | 133 DetectBuiltinWindowsProfiles(&profiles); |
| 137 } else { | 134 } else { |
| 138 DetectBuiltinWindowsProfiles(&profiles); | 135 DetectBuiltinWindowsProfiles(&profiles); |
| 139 DetectFirefoxProfiles(locale, &profiles); | 136 DetectFirefoxProfiles(locale, &profiles); |
| 140 } | 137 } |
| 141 #elif defined(OS_MACOSX) | 138 #elif defined(OS_MACOSX) |
| 142 if (ShellIntegration::IsFirefoxDefaultBrowser()) { | 139 if (ShellIntegration::IsFirefoxDefaultBrowser()) { |
| 143 DetectFirefoxProfiles(locale, &profiles); | 140 DetectFirefoxProfiles(locale, &profiles); |
| 144 DetectSafariProfiles(&profiles); | 141 DetectSafariProfiles(&profiles); |
| 145 } else { | 142 } else { |
| 146 DetectSafariProfiles(&profiles); | 143 DetectSafariProfiles(&profiles); |
| 147 DetectFirefoxProfiles(locale, &profiles); | 144 DetectFirefoxProfiles(locale, &profiles); |
| 148 } | 145 } |
| 149 #else | 146 #else |
| 150 DetectFirefoxProfiles(locale, &profiles); | 147 DetectFirefoxProfiles(locale, &profiles); |
| 151 #endif | 148 #endif |
| 152 if (include_interactive_profiles) { | 149 if (include_interactive_profiles) { |
| 153 importer::SourceProfile* bookmarks_profile = new importer::SourceProfile; | 150 importer::SourceProfile bookmarks_profile; |
| 154 bookmarks_profile->importer_name = | 151 bookmarks_profile.importer_name = |
| 155 l10n_util::GetStringUTF16(IDS_IMPORT_FROM_BOOKMARKS_HTML_FILE); | 152 l10n_util::GetStringUTF16(IDS_IMPORT_FROM_BOOKMARKS_HTML_FILE); |
| 156 bookmarks_profile->importer_type = importer::TYPE_BOOKMARKS_FILE; | 153 bookmarks_profile.importer_type = importer::TYPE_BOOKMARKS_FILE; |
| 157 bookmarks_profile->services_supported = importer::FAVORITES; | 154 bookmarks_profile.services_supported = importer::FAVORITES; |
| 158 profiles.push_back(bookmarks_profile); | 155 profiles.push_back(bookmarks_profile); |
| 159 } | 156 } |
| 160 | 157 |
| 161 return profiles; | 158 return profiles; |
| 162 } | 159 } |
| 163 | 160 |
| 164 } // namespace | 161 } // namespace |
| 165 | 162 |
| 166 ImporterList::ImporterList() | 163 ImporterList::ImporterList() |
| 167 : weak_ptr_factory_(this) { | 164 : weak_ptr_factory_(this) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 184 locale, | 181 locale, |
| 185 include_interactive_profiles), | 182 include_interactive_profiles), |
| 186 base::Bind(&ImporterList::SourceProfilesLoaded, | 183 base::Bind(&ImporterList::SourceProfilesLoaded, |
| 187 weak_ptr_factory_.GetWeakPtr(), | 184 weak_ptr_factory_.GetWeakPtr(), |
| 188 profiles_loaded_callback)); | 185 profiles_loaded_callback)); |
| 189 } | 186 } |
| 190 | 187 |
| 191 const importer::SourceProfile& ImporterList::GetSourceProfileAt( | 188 const importer::SourceProfile& ImporterList::GetSourceProfileAt( |
| 192 size_t index) const { | 189 size_t index) const { |
| 193 DCHECK_LT(index, count()); | 190 DCHECK_LT(index, count()); |
| 194 return *source_profiles_[index]; | 191 return source_profiles_[index]; |
| 195 } | 192 } |
| 196 | 193 |
| 197 void ImporterList::SourceProfilesLoaded( | 194 void ImporterList::SourceProfilesLoaded( |
| 198 const base::Closure& profiles_loaded_callback, | 195 const base::Closure& profiles_loaded_callback, |
| 199 const std::vector<importer::SourceProfile*>& profiles) { | 196 const std::vector<importer::SourceProfile>& profiles) { |
| 200 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 197 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 201 | 198 |
| 202 source_profiles_.assign(profiles.begin(), profiles.end()); | 199 source_profiles_.assign(profiles.begin(), profiles.end()); |
| 203 profiles_loaded_callback.Run(); | 200 profiles_loaded_callback.Run(); |
| 204 } | 201 } |
| OLD | NEW |