diff options
author | jhawkins@google.com <jhawkins@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-17 01:49:53 +0000 |
---|---|---|
committer | jhawkins@google.com <jhawkins@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-17 01:49:53 +0000 |
commit | f078edace3c34929fefcbec8115ae9faf20cf0b4 (patch) | |
tree | b2ac9bcc53047ad60992a58a3aa4f4094eef4ef0 /chrome/browser | |
parent | 50b722ccbcd5e018936b6aefadbcf2a131056886 (diff) | |
download | chromium_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.h | 5 | ||||
-rw-r--r-- | chrome/browser/importer/importer_list.cc | 7 | ||||
-rw-r--r-- | chrome/browser/importer/importer_list.h | 3 | ||||
-rw-r--r-- | chrome/browser/ui/views/importer_view.cc | 35 | ||||
-rw-r--r-- | chrome/browser/ui/views/importer_view.h | 16 |
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(); |