Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(194)

Unified Diff: chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc

Issue 10827420: Revert 152221 - chromeos: Sync animation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
===================================================================
--- chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc (revision 152351)
+++ chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc (working copy)
@@ -16,14 +16,11 @@
#include "base/values.h"
#include "chrome/browser/defaults.h"
#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/pending_extension_manager.h"
#include "chrome/browser/prefs/incognito_mode_prefs.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/prefs/scoped_user_pref_update.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/browser/sync/profile_sync_service.h"
-#include "chrome/browser/sync/profile_sync_service_factory.h"
#include "chrome/browser/ui/ash/chrome_launcher_prefs.h"
#include "chrome/browser/ui/ash/extension_utils.h"
#include "chrome/browser/ui/ash/launcher/browser_launcher_item_controller.h"
@@ -52,13 +49,6 @@
using extensions::Extension;
-namespace {
-
-// Max loading animation time in milliseconds.
-const int kMaxLoadingTimeMs = 60 * 1000;
-
-} // namespace
-
// ChromeLauncherController::Item ----------------------------------------------
ChromeLauncherController::Item::Item()
@@ -78,24 +68,12 @@
ash::LauncherModel* model)
: model_(model),
profile_(profile),
- activation_client_(NULL),
- observed_sync_service_(NULL) {
+ activation_client_(NULL) {
if (!profile_) {
// Use the original profile as on chromeos we may get a temporary off the
// record profile.
profile_ = ProfileManager::GetDefaultProfile()->GetOriginalProfile();
-
- // Monitor app sync on chromeos.
- if (!IsLoggedInAsGuest()) {
- observed_sync_service_ =
- ProfileSyncServiceFactory::GetForProfile(profile_);
- if (observed_sync_service_) {
- observed_sync_service_->AddObserver(this);
- StartLoadingAnimation();
- }
- }
}
-
instance_ = this;
model_->AddObserver(this);
extensions::ShellWindowRegistry::Get(profile_)->AddObserver(this);
@@ -133,9 +111,6 @@
if (ash::Shell::HasInstance())
ash::Shell::GetInstance()->RemoveShellObserver(this);
-
- if (observed_sync_service_)
- observed_sync_service_->RemoveObserver(this);
}
void ChromeLauncherController::Init() {
@@ -288,6 +263,11 @@
ash::wm::ActivateWindow(controller->window());
} else {
DCHECK_EQ(TYPE_APP, id_to_item_map_[id].item_type);
+
+ // Do nothing for pending app shortcut.
+ if (GetItemStatus(id) == ash::STATUS_IS_PENDING)
+ return;
+
OpenAppID(id_to_item_map_[id].app_id, event_flags);
}
}
@@ -633,9 +613,6 @@
}
}
-void ChromeLauncherController::LauncherStatusChanged() {
-}
-
void ChromeLauncherController::Observe(
int type,
const content::NotificationSource& source,
@@ -643,15 +620,18 @@
switch (type) {
case chrome::NOTIFICATION_EXTENSION_LOADED: {
UpdateAppLaunchersFromPref();
- CheckAppSync();
break;
}
case chrome::NOTIFICATION_EXTENSION_UNLOADED: {
const content::Details<extensions::UnloadedExtensionInfo> unload_info(
details);
const Extension* extension = unload_info->extension;
- if (IsAppPinned(extension->id()))
- DoUnpinAppsWithID(extension->id());
+ if (IsAppPinned(extension->id())) {
+ if (unload_info->reason == extension_misc::UNLOAD_REASON_UPDATE)
+ MarkAppPending(extension->id());
+ else
+ DoUnpinAppsWithID(extension->id());
+ }
break;
}
case chrome::NOTIFICATION_PREF_CHANGED: {
@@ -764,11 +744,6 @@
profile_->GetPrefs()->SetString(prefs::kShelfAlignment, pref_value);
}
-void ChromeLauncherController::OnStateChanged() {
- DCHECK(observed_sync_service_);
- CheckAppSync();
-}
-
void ChromeLauncherController::PersistPinnedState() {
// It is a coding error to call PersistPinnedState() if the pinned apps are
// not user-editable. The code should check earlier and not perform any
@@ -825,6 +800,18 @@
return item.status;
}
+void ChromeLauncherController::MarkAppPending(const std::string& app_id) {
+ for (IDToItemMap::const_iterator i = id_to_item_map_.begin();
+ i != id_to_item_map_.end(); ++i) {
+ if (i->second.item_type == TYPE_APP && i->second.app_id == app_id) {
+ if (GetItemStatus(i->first) == ash::STATUS_CLOSED)
+ SetItemStatus(i->first, ash::STATUS_IS_PENDING);
+
+ break;
+ }
+ }
+}
+
void ChromeLauncherController::DoPinAppWithID(const std::string& app_id) {
// If there is an item, do nothing and return.
if (IsAppPinned(app_id))
@@ -882,6 +869,13 @@
IDToItemMap::const_iterator entry(id_to_item_map_.find(item.id));
if (entry != id_to_item_map_.end() &&
entry->second.app_id == *pref_app_id) {
+ // Current item will be kept. Reset its pending state and ensure
+ // its icon is loaded since it has to be valid to be in |pinned_apps|.
+ if (item.status == ash::STATUS_IS_PENDING) {
+ SetItemStatus(item.id, ash::STATUS_CLOSED);
+ app_icon_loader_->FetchImage(*pref_app_id);
+ }
+
++pref_app_id;
break;
} else {
@@ -978,55 +972,28 @@
}
item.is_incognito = false;
item.image = Extension::GetDefaultIcon(true);
-
- TabContents* active_tab = GetLastActiveTabContents(app_id);
- if (active_tab) {
- Browser* browser = browser::FindBrowserWithWebContents(
- active_tab->web_contents());
- DCHECK(browser);
- if (browser->window()->IsActive())
- status = ash::STATUS_ACTIVE;
- else
- status = ash::STATUS_RUNNING;
+ if (item.type == ash::TYPE_APP_SHORTCUT &&
+ !app_tab_helper_->IsValidID(app_id)) {
+ item.status = ash::STATUS_IS_PENDING;
+ } else {
+ TabContents* active_tab = GetLastActiveTabContents(app_id);
+ if (active_tab) {
+ Browser* browser = browser::FindBrowserWithWebContents(
+ active_tab->web_contents());
+ DCHECK(browser);
+ if (browser->window()->IsActive())
+ status = ash::STATUS_ACTIVE;
+ else
+ status = ash::STATUS_RUNNING;
+ }
+ item.status = status;
}
- item.status = status;
-
model_->AddAt(index, item);
if (!controller || controller->type() !=
BrowserLauncherItemController::TYPE_EXTENSION_PANEL) {
- app_icon_loader_->FetchImage(app_id);
+ if (item.status != ash::STATUS_IS_PENDING)
+ app_icon_loader_->FetchImage(app_id);
}
-
return id;
}
-
-void ChromeLauncherController::CheckAppSync() {
- if (!observed_sync_service_)
- return;
-
- const bool synced = observed_sync_service_->ShouldPushChanges();
- const bool has_pending_extension = profile_->GetExtensionService()->
- pending_extension_manager()->HasPendingExtensionFromSync();
-
- if (synced && !has_pending_extension)
- StopLoadingAnimation();
-}
-
-void ChromeLauncherController::StartLoadingAnimation() {
- DCHECK(observed_sync_service_);
- loading_timer_.Start(
- FROM_HERE,
- base::TimeDelta::FromMilliseconds(kMaxLoadingTimeMs),
- this, &ChromeLauncherController::StopLoadingAnimation);
- model_->SetStatus(ash::LauncherModel::STATUS_LOADING);
-}
-
-void ChromeLauncherController::StopLoadingAnimation() {
- DCHECK(observed_sync_service_);
-
- model_->SetStatus(ash::LauncherModel::STATUS_NORMAL);
- loading_timer_.Stop();
- observed_sync_service_->RemoveObserver(this);
- observed_sync_service_ = NULL;
-}

Powered by Google App Engine
This is Rietveld 408576698