diff options
author | sargrass@google.com <sargrass@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-03 01:34:59 +0000 |
---|---|---|
committer | sargrass@google.com <sargrass@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-03 01:34:59 +0000 |
commit | 1598e53ded179bb58e0c14a14eba0707bd855d8b (patch) | |
tree | 9217a389664fb4805e9e6136af28a26e76fc931b | |
parent | 4f32303e4491c3b2358825e0b26f8c5db3b28b33 (diff) | |
download | chromium_src-1598e53ded179bb58e0c14a14eba0707bd855d8b.zip chromium_src-1598e53ded179bb58e0c14a14eba0707bd855d8b.tar.gz chromium_src-1598e53ded179bb58e0c14a14eba0707bd855d8b.tar.bz2 |
Implement import data overlay
BUG=None
TEST=None
Review URL: http://codereview.chromium.org/3029044
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@54673 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/dom_ui/import_data_handler.cc | 69 | ||||
-rw-r--r-- | chrome/browser/dom_ui/import_data_handler.h | 15 | ||||
-rw-r--r-- | chrome/browser/resources/options/import_data_overlay.html | 8 | ||||
-rw-r--r-- | chrome/browser/resources/options/import_data_overlay.js | 87 |
4 files changed, 160 insertions, 19 deletions
diff --git a/chrome/browser/dom_ui/import_data_handler.cc b/chrome/browser/dom_ui/import_data_handler.cc index 19d780d..9aa8d18 100644 --- a/chrome/browser/dom_ui/import_data_handler.cc +++ b/chrome/browser/dom_ui/import_data_handler.cc @@ -6,8 +6,13 @@ #include "app/l10n_util.h" #include "base/basictypes.h" +#include "base/scoped_ptr.h" +#include "base/string_util.h" +#include "base/utf_string_conversions.h" #include "base/values.h" #include "base/callback.h" +#include "chrome/browser/pref_service.h" +#include "chrome/browser/profile.h" #include "grit/chromium_strings.h" #include "grit/generated_resources.h" #include "chrome/browser/importer/importer_data_types.h" @@ -42,9 +47,13 @@ void ImportDataHandler::GetLocalizedValues( l10n_util::GetString(IDS_IMPORT_PASSWORDS_CHKBOX)); localized_strings->SetString(L"import_history", l10n_util::GetString(IDS_IMPORT_HISTORY_CHKBOX)); + localized_strings->SetString(L"no_profile_found", + l10n_util::GetString(IDS_IMPORT_NO_PROFILE_FOUND)); } void ImportDataHandler::RegisterMessages() { + dom_ui_->RegisterMessageCallback( + "importData", NewCallback(this, &ImportDataHandler::ImportData)); } void ImportDataHandler::DetectSupportedBrowsers() { @@ -59,14 +68,64 @@ void ImportDataHandler::DetectSupportedBrowsers() { entry->SetInteger(L"index", i); supported_browsers.Append(entry); } - } else { - DictionaryValue* entry = new DictionaryValue(); - entry->SetString(L"name", l10n_util::GetString(IDS_IMPORT_FROM_LABEL)); - entry->SetInteger(L"index", 0); - supported_browsers.Append(entry); } dom_ui_->CallJavascriptFunction( L"options.ImportDataOverlay.updateSupportedBrowsers", supported_browsers); } + +void ImportDataHandler::ImportData(const Value* value) { + if (!value || !value->IsType(Value::TYPE_LIST)) { + NOTREACHED(); + return; + } + + const ListValue* param_values = static_cast<const ListValue*>(value); + std::string string_value; + if(param_values->GetSize() != 1 || + !param_values->GetString(0, &string_value)) { + NOTREACHED(); + return; + } + int browser_index = string_value[0] - '0'; + + uint16 items = importer::NONE; + if(string_value[1] == '1') { + items |= importer::FAVORITES; + } + if(string_value[2] == '1') { + items |= importer::SEARCH_ENGINES; + } + if(string_value[3] == '1') { + items |= importer::PASSWORDS; + } + if(string_value[4] == '1') { + items |= importer::HISTORY; + } + + const ProfileInfo& source_profile = + importer_host_->GetSourceProfileInfoAt(browser_index); + Profile* profile = dom_ui_->GetProfile(); + + FundamentalValue state(true); + dom_ui_->CallJavascriptFunction( + L"ImportDataOverlay.setImportingState", state); + + importer_host_->SetObserver(this); + importer_host_->StartImportSettings(source_profile, profile, items, + new ProfileWriter(profile), false); +} + +void ImportDataHandler::ImportStarted() { +} + +void ImportDataHandler::ImportItemStarted(importer::ImportItem item) { +} + +void ImportDataHandler::ImportItemEnded(importer::ImportItem item) { +} + +void ImportDataHandler::ImportEnded() { + dom_ui_->CallJavascriptFunction(L"ImportDataOverlay.dismiss"); +} diff --git a/chrome/browser/dom_ui/import_data_handler.h b/chrome/browser/dom_ui/import_data_handler.h index 1e86fc6..a1d1e54 100644 --- a/chrome/browser/dom_ui/import_data_handler.h +++ b/chrome/browser/dom_ui/import_data_handler.h @@ -9,7 +9,8 @@ #include "chrome/browser/importer/importer.h" // Chrome personal stuff import data overlay UI handler. -class ImportDataHandler : public OptionsPageUIHandler { +class ImportDataHandler : public OptionsPageUIHandler, + public ImporterHost::Observer { public: ImportDataHandler(); virtual ~ImportDataHandler(); @@ -24,9 +25,17 @@ class ImportDataHandler : public OptionsPageUIHandler { private: void DetectSupportedBrowsers(); + void ImportData(const Value* value); - // Utility class that does the actual import. - scoped_refptr<ImporterHost> importer_host_; + //Callback from ImporterHost. Close the Dialog. + virtual void ImportStarted(); + virtual void ImportItemStarted(importer::ImportItem item); + virtual void ImportItemEnded(importer::ImportItem item); + virtual void ImportEnded(); + + // If non-null it means importing is in progress. ImporterHost takes care + // of deleting itself when done.import. + ImporterHost* importer_host_; DISALLOW_COPY_AND_ASSIGN(ImportDataHandler); }; diff --git a/chrome/browser/resources/options/import_data_overlay.html b/chrome/browser/resources/options/import_data_overlay.html index 35d2e3e..5bab568 100644 --- a/chrome/browser/resources/options/import_data_overlay.html +++ b/chrome/browser/resources/options/import_data_overlay.html @@ -4,8 +4,8 @@ <span i18n-content="import_from_label"></span> <select id="supported-browsers"></select> </div> - <div> - <span i18n-content="import_description"></span> + <div id="checkboxList"> + <span i18n-content="import_description"></span><br> <label> <input id="import-favorites" type="checkbox"> <span i18n-content="import_favorites"> @@ -23,6 +23,8 @@ <span i18n-content="import_history"> </label><br> </div> - <button id="import-data-cancel" i18n-content="cancel"></button> + <span id="import-throbber"></span> + <button id="import-data-cancel" i18n-content="cancel" + onclick="ImportDataOverlay.dismiss();"></button> <button id="import-data-commit" i18n-content="import_commit"></button> </div> diff --git a/chrome/browser/resources/options/import_data_overlay.js b/chrome/browser/resources/options/import_data_overlay.js index 744dbef..784b831 100644 --- a/chrome/browser/resources/options/import_data_overlay.js +++ b/chrome/browser/resources/options/import_data_overlay.js @@ -17,6 +17,9 @@ cr.define('options', function() { 'importDataOverlay'); } + ImportDataOverlay.throbIntervalId = 0 + ImportDataOverlay.checkboxMask = ""; + cr.addSingletonGetter(ImportDataOverlay); ImportDataOverlay.prototype = { @@ -30,13 +33,42 @@ cr.define('options', function() { // Call base class implementation to starts preference initialization. OptionsPage.prototype.initializePage.call(this); - $('import-data-cancel').onclick = function(e) { - OptionsPage.clearOverlays(); + var self = this; + var checkboxList = $('checkboxList').getElementsByTagName('input'); + for (var i = 0; i < checkboxList.length; ++i) { + if(checkboxList[i].type == 'checkbox') + checkboxList[i].onchange = function(e) { + self.countCheckboxes_(); + }; } $('import-data-commit').onclick = function(e) { - var paramList = new Array(); + /** The first digit in paramList indicates browser selected + * The rest indicate the checkboxes (1 is checked, 0 is not) + */ + var selectedBrowser = $('supported-browsers').selectedIndex; + var paramList = + String(selectedBrowser) + ImportDataOverlay.checkboxMask; + + chrome.send('importData', [paramList]); + } + }, + + countCheckboxes_: function() { + ImportDataOverlay.checkboxMask = ""; + var checkboxList = $('checkboxList').getElementsByTagName('input'); + for (var i = 0; i < checkboxList.length; ++i) { + if (checkboxList[i].type == 'checkbox') { + if(checkboxList[i].checked) + ImportDataOverlay.checkboxMask += "1"; + else + ImportDataOverlay.checkboxMask += "0"; + } } + if (ImportDataOverlay.checkboxMask.indexOf("1") == -1) + $('import-data-commit').disabled = true; + else + $('import-data-commit').disabled = false; }, /** @@ -54,11 +86,23 @@ cr.define('options', function() { updateSupportedBrowsers_: function(browsers) { this.clearSupportedBrowsers_(); browserSelect = $('supported-browsers'); - browserCount = browsers.length - for (var i = 0; i < browserCount; i++) { - var browser = browsers[i] - var option = new Option(browser['name'], browser['index']); + browserCount = browsers.length; + + if(browserCount == 0) { + var option = new Option(templateData.no_profile_found, 0); browserSelect.appendChild(option); + + ImportDataOverlay.setImportingState(true); + } + else { + for (var i = 0; i < browserCount; i++) { + var browser = browsers[i] + var option = new Option(browser['name'], browser['index']); + browserSelect.appendChild(option); + + ImportDataOverlay.setImportingState(false); + this.countCheckboxes_(); + } } }, }; @@ -67,10 +111,37 @@ cr.define('options', function() { ImportDataOverlay.getInstance().updateSupportedBrowsers_(browsers); } + ImportDataOverlay.setImportingState = function(state) { + $('supported-browsers').disabled = state; + $('import-favorites').disabled = state; + $('import-search').disabled = state; + $('import-passwords').disabled = state; + $('import-history').disabled = state; + $('import-data-commit').disabled = state; + $('import-throbber').style.visibility = state ? "visible" : "hidden"; + + function advanceThrobber() { + var throbber = $('import-throbber'); + throbber.style.backgroundPositionX = + ((parseInt(getComputedStyle(throbber).backgroundPositionX, 10) - 16) + % 576) + 'px'; + } + if (state) { + ImportDataOverlay.throbIntervalId = + setInterval(advanceThrobber, 30); + } else { + clearInterval(ImportDataOverlay.throbIntervalId); + } + } + + ImportDataOverlay.dismiss = function() { + OptionsPage.clearOverlays(); + ImportDataOverlay.setImportingState(false); + } + // Export return { ImportDataOverlay: ImportDataOverlay }; }); - |