summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsargrass@google.com <sargrass@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-03 01:34:59 +0000
committersargrass@google.com <sargrass@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-03 01:34:59 +0000
commit1598e53ded179bb58e0c14a14eba0707bd855d8b (patch)
tree9217a389664fb4805e9e6136af28a26e76fc931b
parent4f32303e4491c3b2358825e0b26f8c5db3b28b33 (diff)
downloadchromium_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.cc69
-rw-r--r--chrome/browser/dom_ui/import_data_handler.h15
-rw-r--r--chrome/browser/resources/options/import_data_overlay.html8
-rw-r--r--chrome/browser/resources/options/import_data_overlay.js87
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
};
});
-