summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhongbo.min@intel.com <hongbo.min@intel.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-27 18:58:27 +0000
committerhongbo.min@intel.com <hongbo.min@intel.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-27 18:58:27 +0000
commitc7b110ca87997c1ccd3271c0de42203d9104e2ec (patch)
tree4137030d91f818ac13935a2ba855065d054dcd00
parent19921da9681893ac22daede29785bb0cace3d9b0 (diff)
downloadchromium_src-c7b110ca87997c1ccd3271c0de42203d9104e2ec.zip
chromium_src-c7b110ca87997c1ccd3271c0de42203d9104e2ec.tar.gz
chromium_src-c7b110ca87997c1ccd3271c0de42203d9104e2ec.tar.bz2
This fix is to make the applauncher window will not be closed after uninstall dialog is showed.
BUG=None Review URL: https://chromiumcodereview.appspot.com/11413161 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@169697 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/ui/app_list/app_list_controller.h4
-rw-r--r--chrome/browser/ui/app_list/extension_app_item.cc15
-rw-r--r--chrome/browser/ui/views/app_list/app_list_controller_win.cc19
3 files changed, 31 insertions, 7 deletions
diff --git a/chrome/browser/ui/app_list/app_list_controller.h b/chrome/browser/ui/app_list/app_list_controller.h
index aa10ecc..a2a6330 100644
--- a/chrome/browser/ui/app_list/app_list_controller.h
+++ b/chrome/browser/ui/app_list/app_list_controller.h
@@ -31,6 +31,10 @@ class AppListControllerDelegate {
virtual void UnpinApp(const std::string& extension_id);
virtual bool CanPin() = 0;
+ // Be aware of the extension uninstalling flow.
+ virtual void AboutToUninstallApp() {}
+ virtual void UninstallAppCompleted() {}
+
// Whether the controller supports showing the Create Shortcuts dialog.
virtual bool CanShowCreateShortcutsDialog() = 0;
virtual void ShowCreateShortcutsDialog(Profile* profile,
diff --git a/chrome/browser/ui/app_list/extension_app_item.cc b/chrome/browser/ui/app_list/extension_app_item.cc
index f4bed55..e38d3ae 100644
--- a/chrome/browser/ui/app_list/extension_app_item.cc
+++ b/chrome/browser/ui/app_list/extension_app_item.cc
@@ -56,9 +56,11 @@ enum CommandId {
class ExtensionUninstaller : public ExtensionUninstallDialog::Delegate {
public:
ExtensionUninstaller(Profile* profile,
- const std::string& extension_id)
+ const std::string& extension_id,
+ AppListControllerDelegate* controller)
: profile_(profile),
- extension_id_(extension_id) {
+ extension_id_(extension_id),
+ controller_(controller) {
}
void Run() {
@@ -68,7 +70,7 @@ class ExtensionUninstaller : public ExtensionUninstallDialog::Delegate {
CleanUp();
return;
}
-
+ controller_->AboutToUninstallApp();
ExtensionUninstallDialog* dialog =
ExtensionUninstallDialog::Create(NULL, this);
dialog->ConfirmUninstall(extension);
@@ -84,11 +86,12 @@ class ExtensionUninstaller : public ExtensionUninstallDialog::Delegate {
false, /* external_uninstall*/
NULL);
}
-
+ controller_->UninstallAppCompleted();
CleanUp();
}
virtual void ExtensionUninstallCanceled() OVERRIDE {
+ controller_->UninstallAppCompleted();
CleanUp();
}
@@ -98,6 +101,7 @@ class ExtensionUninstaller : public ExtensionUninstallDialog::Delegate {
Profile* profile_;
std::string extension_id_;
+ AppListControllerDelegate* controller_;
DISALLOW_COPY_AND_ASSIGN(ExtensionUninstaller);
};
@@ -236,7 +240,8 @@ void ExtensionAppItem::ShowExtensionDetails() {
void ExtensionAppItem::StartExtensionUninstall() {
// ExtensionUninstall deletes itself when done or aborted.
ExtensionUninstaller* uninstaller = new ExtensionUninstaller(profile_,
- extension_id_);
+ extension_id_,
+ controller_);
uninstaller->Run();
}
diff --git a/chrome/browser/ui/views/app_list/app_list_controller_win.cc b/chrome/browser/ui/views/app_list/app_list_controller_win.cc
index 692ee6e..c2e2cf3 100644
--- a/chrome/browser/ui/views/app_list/app_list_controller_win.cc
+++ b/chrome/browser/ui/views/app_list/app_list_controller_win.cc
@@ -95,6 +95,8 @@ class AppListControllerDelegateWin : public AppListControllerDelegate {
virtual void ViewClosing() OVERRIDE;
virtual void ViewActivationChanged(bool active) OVERRIDE;
virtual bool CanPin() OVERRIDE;
+ virtual void AboutToUninstallApp() OVERRIDE;
+ virtual void UninstallAppCompleted() OVERRIDE;
virtual bool CanShowCreateShortcutsDialog() OVERRIDE;
virtual void ShowCreateShortcutsDialog(
Profile* profile,
@@ -113,9 +115,11 @@ class AppListControllerDelegateWin : public AppListControllerDelegate {
// list to operate, and controls when the app list is opened and closed.
class AppListController {
public:
- AppListController() : current_view_(NULL) {}
+ AppListController() : current_view_(NULL), can_close_app_list_(true) {}
~AppListController() {}
+ void set_can_close(bool can_close) { can_close_app_list_ = can_close; }
+ bool can_close() { return can_close_app_list_; }
void ShowAppList();
void CloseAppList();
void AppListClosing();
@@ -148,6 +152,9 @@ class AppListController {
app_list::PaginationModel pagination_model_;
+ // True if the controller can close the app list.
+ bool can_close_app_list_;
+
DISALLOW_COPY_AND_ASSIGN(AppListController);
};
@@ -178,6 +185,14 @@ bool AppListControllerDelegateWin::CanPin() {
return false;
}
+void AppListControllerDelegateWin::AboutToUninstallApp() {
+ g_app_list_controller.Get().set_can_close(false);
+}
+
+void AppListControllerDelegateWin::UninstallAppCompleted() {
+ g_app_list_controller.Get().set_can_close(true);
+}
+
bool AppListControllerDelegateWin::CanShowCreateShortcutsDialog() {
return true;
}
@@ -256,7 +271,7 @@ void AppListController::ShowAppList() {
}
void AppListController::CloseAppList() {
- if (current_view_)
+ if (current_view_ && can_close_app_list_)
current_view_->GetWidget()->Close();
}