summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorjhawkins@google.com <jhawkins@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-17 01:49:53 +0000
committerjhawkins@google.com <jhawkins@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-17 01:49:53 +0000
commitf078edace3c34929fefcbec8115ae9faf20cf0b4 (patch)
treeb2ac9bcc53047ad60992a58a3aa4f4094eef4ef0 /chrome/browser
parent50b722ccbcd5e018936b6aefadbcf2a131056886 (diff)
downloadchromium_src-f078edace3c34929fefcbec8115ae9faf20cf0b4.zip
chromium_src-f078edace3c34929fefcbec8115ae9faf20cf0b4.tar.gz
chromium_src-f078edace3c34929fefcbec8115ae9faf20cf0b4.tar.bz2
Views: Implement the ImporterList::Observer in ImporterView to enable the
correct asynchronous version of Importer. BUG=none TEST=none Review URL: http://codereview.chromium.org/5873005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@69502 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/importer/importer.h5
-rw-r--r--chrome/browser/importer/importer_list.cc7
-rw-r--r--chrome/browser/importer/importer_list.h3
-rw-r--r--chrome/browser/ui/views/importer_view.cc35
-rw-r--r--chrome/browser/ui/views/importer_view.h16
5 files changed, 48 insertions, 18 deletions
diff --git a/chrome/browser/importer/importer.h b/chrome/browser/importer/importer.h
index bc25850..e994036 100644
--- a/chrome/browser/importer/importer.h
+++ b/chrome/browser/importer/importer.h
@@ -184,6 +184,11 @@ class ImporterHost : public base::RefCountedThreadSafe<ImporterHost>,
return importer_list_->GetSourceProfileInfoForBrowserType(browser_type);
}
+ // Returns true if the source profiles have been loaded.
+ bool source_profiles_loaded() const {
+ return importer_list_->source_profiles_loaded();
+ }
+
protected:
friend class base::RefCountedThreadSafe<ImporterHost>;
diff --git a/chrome/browser/importer/importer_list.cc b/chrome/browser/importer/importer_list.cc
index e38cc5e..10e1101 100644
--- a/chrome/browser/importer/importer_list.cc
+++ b/chrome/browser/importer/importer_list.cc
@@ -98,7 +98,8 @@ void DetectFirefoxProfiles(std::vector<importer::ProfileInfo*>* profiles) {
profiles->push_back(firefox);
}
-void DetectGoogleToolbarProfiles(std::vector<importer::ProfileInfo*>* profiles) {
+void DetectGoogleToolbarProfiles(
+ std::vector<importer::ProfileInfo*>* profiles) {
if (FirstRun::IsChromeFirstRun())
return;
@@ -196,6 +197,10 @@ const importer::ProfileInfo& ImporterList::GetSourceProfileInfoForBrowserType(
return *(new importer::ProfileInfo());
}
+bool ImporterList::source_profiles_loaded() const {
+ return source_profiles_loaded_;
+}
+
void ImporterList::DetectSourceProfilesWorker() {
// TODO(jhawkins): Remove this condition once DetectSourceProfileHack is
// removed. |observer_| is NULL when said method is called.
diff --git a/chrome/browser/importer/importer_list.h b/chrome/browser/importer/importer_list.h
index fc801fc..f3db148 100644
--- a/chrome/browser/importer/importer_list.h
+++ b/chrome/browser/importer/importer_list.h
@@ -61,6 +61,9 @@ class ImporterList : public base::RefCountedThreadSafe<ImporterList> {
const importer::ProfileInfo& GetSourceProfileInfoForBrowserType(
int browser_type) const;
+ // Returns true if the source profiles have been loaded.
+ bool source_profiles_loaded() const;
+
private:
friend class base::RefCountedThreadSafe<ImporterList>;
diff --git a/chrome/browser/ui/views/importer_view.cc b/chrome/browser/ui/views/importer_view.cc
index 4ef686f..cbbfba7 100644
--- a/chrome/browser/ui/views/importer_view.cc
+++ b/chrome/browser/ui/views/importer_view.cc
@@ -5,7 +5,7 @@
#include "chrome/browser/views/importer_view.h"
#include "app/l10n_util.h"
-#include "base/string16.h"
+#include "base/compiler_specific.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/browser_list.h"
#include "chrome/browser/browser_window.h"
@@ -42,7 +42,7 @@ ImporterView::ImporterView(Profile* profile, int initial_state)
passwords_checkbox_(NULL),
search_engines_checkbox_(NULL),
profile_(profile),
- importer_host_(new ImporterHost()),
+ ALLOW_THIS_IN_INITIALIZER_LIST(importer_host_(new ImporterHost(this))),
initial_state_(initial_state) {
DCHECK(profile);
SetupControl();
@@ -149,9 +149,8 @@ std::wstring ImporterView::GetWindowTitle() const {
}
bool ImporterView::Accept() {
- if (!IsDialogButtonEnabled(MessageBoxFlags::DIALOGBUTTON_OK)) {
+ if (!IsDialogButtonEnabled(MessageBoxFlags::DIALOGBUTTON_OK))
return false;
- }
uint16 items = GetCheckedItems();
@@ -179,15 +178,16 @@ void ImporterView::ButtonPressed(
int ImporterView::GetItemCount() {
DCHECK(importer_host_.get());
- int item_count = importer_host_->GetAvailableProfileCount();
- if (checkbox_items_.size() < static_cast<size_t>(item_count))
- checkbox_items_.resize(item_count, initial_state_);
- return item_count;
+ return checkbox_items_.size();
}
string16 ImporterView::GetItemAt(int index) {
DCHECK(importer_host_.get());
- return WideToUTF16Hack(importer_host_->GetSourceProfileNameAt(index));
+
+ if (!importer_host_->source_profiles_loaded())
+ return l10n_util::GetStringUTF16(IDS_IMPORT_LOADING_PROFILES);
+ else
+ return WideToUTF16Hack(importer_host_->GetSourceProfileNameAt(index));
}
void ImporterView::ItemChanged(views::Combobox* combobox,
@@ -199,6 +199,11 @@ void ImporterView::ItemChanged(views::Combobox* combobox,
if (prev_index == new_index)
return;
+ if (!importer_host_->source_profiles_loaded()) {
+ SetCheckedItemsState(0);
+ return;
+ }
+
// Save the current state
uint16 prev_items = GetCheckedItems();
checkbox_items_[prev_index] = prev_items;
@@ -213,6 +218,15 @@ void ImporterView::ItemChanged(views::Combobox* combobox,
SetCheckedItems(new_items);
}
+void ImporterView::SourceProfilesLoaded() {
+ DCHECK(importer_host_->source_profiles_loaded());
+ checkbox_items_.resize(
+ importer_host_->GetAvailableProfileCount(), initial_state_);
+
+ // Reload the profile combobox.
+ profile_combobox_->ModelChanged();
+}
+
void ImporterView::ImportCanceled() {
ImportComplete();
}
@@ -282,6 +296,5 @@ void ImporterView::SetCheckedItems(uint16 items) {
passwords_checkbox_->SetChecked(!!(items & importer::PASSWORDS));
if (search_engines_checkbox_->IsEnabled())
- search_engines_checkbox_->SetChecked(!!(items &
- importer::SEARCH_ENGINES));
+ search_engines_checkbox_->SetChecked(!!(items & importer::SEARCH_ENGINES));
}
diff --git a/chrome/browser/ui/views/importer_view.h b/chrome/browser/ui/views/importer_view.h
index ca1ce1c..0d06485 100644
--- a/chrome/browser/ui/views/importer_view.h
+++ b/chrome/browser/ui/views/importer_view.h
@@ -31,6 +31,7 @@ class ImporterView : public views::View,
public views::ButtonListener,
public ComboboxModel,
public views::Combobox::Listener,
+ public ImporterList::Observer,
public ImportObserver {
public:
// Creates a new ImporterView. |initial_state| is a bitmask of ImportItems.
@@ -38,11 +39,11 @@ class ImporterView : public views::View,
ImporterView(Profile* profile, int initial_state);
virtual ~ImporterView();
- // Overridden from views::View:
+ // views::View implementation.
virtual gfx::Size GetPreferredSize();
virtual void Layout();
- // Overridden from views::DialogDelegate:
+ // views::DialogDelegate implementation.
virtual std::wstring GetDialogButtonLabel(
MessageBoxFlags::DialogButton button) const;
virtual bool IsDialogButtonEnabled(
@@ -52,19 +53,22 @@ class ImporterView : public views::View,
virtual bool Accept();
virtual views::View* GetContentsView();
- // Overridden from views::ButtonListener:
+ // views::ButtonListener implementation.
virtual void ButtonPressed(views::Button* sender, const views::Event& event);
- // Overridden from ComboboxModel:
+ // ComboboxModel implementation.
virtual int GetItemCount();
virtual string16 GetItemAt(int index);
- // Overridden from ChromeViews::Combobox::Listener:
+ // ChromeViews::Combobox::Listener implementation.
virtual void ItemChanged(views::Combobox* combobox,
int prev_index,
int new_index);
- // Overridden from ImportObserver:
+ // ImporterList::Observer implementation.
+ virtual void SourceProfilesLoaded();
+
+ // ImportObserver implementation.
virtual void ImportCanceled();
virtual void ImportComplete();