172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/options/import_data_handler.h" 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <string> 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/basictypes.h" 10513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "base/callback.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/string16.h" 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/string_number_conversions.h" 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/string_util.h" 153f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/threading/thread_restrictions.h" 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/utf_string_conversions.h" 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/values.h" 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/importer/external_process_importer_host.h" 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/importer/importer_host.h" 2021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h" 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "grit/chromium_strings.h" 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "grit/generated_resources.h" 2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h" 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenImportDataHandler::ImportDataHandler() : importer_host_(NULL) { 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenImportDataHandler::~ImportDataHandler() { 2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (importer_list_) 3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen importer_list_->SetObserver(NULL); 3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (importer_host_) 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen importer_host_->SetObserver(NULL); 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid ImportDataHandler::GetLocalizedValues( 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* localized_strings) { 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(localized_strings); 39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen static OptionsStringResource resources[] = { 41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen { "importFromLabel", IDS_IMPORT_FROM_LABEL }, 42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen { "importLoading", IDS_IMPORT_LOADING_PROFILES }, 43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen { "importDescription", IDS_IMPORT_ITEMS_LABEL }, 44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen { "importHistory", IDS_IMPORT_HISTORY_CHKBOX }, 45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen { "importFavorites", IDS_IMPORT_FAVORITES_CHKBOX }, 46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen { "importSearch", IDS_IMPORT_SEARCH_ENGINES_CHKBOX }, 47dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen { "importPasswords", IDS_IMPORT_PASSWORDS_CHKBOX }, 48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen { "importCommit", IDS_IMPORT_COMMIT }, 49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen { "noProfileFound", IDS_IMPORT_NO_PROFILE_FOUND }, 50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen }; 51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 52dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen RegisterStrings(localized_strings, resources, arraysize(resources)); 5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen RegisterTitle(localized_strings, "importDataOverlay", 5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen IDS_IMPORT_SETTINGS_TITLE); 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid ImportDataHandler::Initialize() { 5821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen importer_list_ = new ImporterList; 5921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen importer_list_->DetectSourceProfiles(this); 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid ImportDataHandler::RegisterMessages() { 6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->RegisterMessageCallback( 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen "importData", NewCallback(this, &ImportDataHandler::ImportData)); 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid ImportDataHandler::ImportData(const ListValue* args) { 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string string_value; 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int browser_index; 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!args->GetString(0, &string_value) || 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen !base::StringToInt(string_value, &browser_index)) { 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NOTREACHED(); 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen uint16 selected_items = importer::NONE; 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (args->GetString(1, &string_value) && string_value == "true") { 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen selected_items |= importer::HISTORY; 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (args->GetString(2, &string_value) && string_value == "true") { 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen selected_items |= importer::FAVORITES; 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (args->GetString(3, &string_value) && string_value == "true") { 85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen selected_items |= importer::PASSWORDS; 86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (args->GetString(4, &string_value) && string_value == "true") { 88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen selected_items |= importer::SEARCH_ENGINES; 89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const importer::SourceProfile& source_profile = 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen importer_list_->GetSourceProfileAt(browser_index); 93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen uint16 supported_items = source_profile.services_supported; 94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen uint16 import_services = (selected_items & supported_items); 96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (import_services) { 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FundamentalValue state(true); 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen web_ui_->CallJavascriptFunction("ImportDataOverlay.setImportingState", 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen state); 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 101513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // TODO(csilv): Out-of-process import has only been qualified on MacOS X, 102513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // so we will only use it on that platform since it is required. Remove this 103513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // conditional logic once oop import is qualified for Linux/Windows. 104513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // http://crbug.com/22142 105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#if defined(OS_MACOSX) 10672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen importer_host_ = new ExternalProcessImporterHost; 107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#else 10872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen importer_host_ = new ImporterHost; 109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif 110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen importer_host_->SetObserver(this); 11172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Profile* profile = web_ui_->GetProfile(); 112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen importer_host_->StartImportSettings(source_profile, profile, 113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen import_services, 114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new ProfileWriter(profile), false); 115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 116bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LOG(WARNING) << "There were no settings to import from '" 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen << source_profile.importer_name << "'."; 118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ImportDataHandler::OnSourceProfilesLoaded() { 12221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ListValue browser_profiles; 123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (size_t i = 0; i < importer_list_->count(); ++i) { 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const importer::SourceProfile& source_profile = 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen importer_list_->GetSourceProfileAt(i); 12621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen uint16 browser_services = source_profile.services_supported; 12721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 12821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DictionaryValue* browser_profile = new DictionaryValue(); 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser_profile->SetString("name", source_profile.importer_name); 13021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen browser_profile->SetInteger("index", i); 13121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen browser_profile->SetBoolean("history", 13221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen (browser_services & importer::HISTORY) != 0); 13321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen browser_profile->SetBoolean("favorites", 13421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen (browser_services & importer::FAVORITES) != 0); 13521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen browser_profile->SetBoolean("passwords", 13621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen (browser_services & importer::PASSWORDS) != 0); 13721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen browser_profile->SetBoolean("search", 13821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen (browser_services & importer::SEARCH_ENGINES) != 0); 13921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 14021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen browser_profiles.Append(browser_profile); 14121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 14221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 14372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->CallJavascriptFunction( 144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "options.ImportDataOverlay.updateSupportedBrowsers", browser_profiles); 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ImportDataHandler::ImportStarted() { 148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ImportDataHandler::ImportItemStarted(importer::ImportItem item) { 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TODO(csilv): show progress detail in the web view. 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ImportDataHandler::ImportItemEnded(importer::ImportItem item) { 155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TODO(csilv): show progress detail in the web view. 156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ImportDataHandler::ImportEnded() { 159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen importer_host_->SetObserver(NULL); 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen importer_host_ = NULL; 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen web_ui_->CallJavascriptFunction("ImportDataOverlay.dismiss"); 16321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 164