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

Side by Side Diff: chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc

Issue 23708028: Reduce calling count of UpdateAppState() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" 5 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "ash/ash_switches.h" 9 #include "ash/ash_switches.h"
10 #include "ash/desktop_background/desktop_background_controller.h" 10 #include "ash/desktop_background/desktop_background_controller.h"
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 app_id, 383 app_id,
384 status, 384 status,
385 index, 385 index,
386 controller->GetLauncherItemType()); 386 controller->GetLauncherItemType());
387 } 387 }
388 388
389 void ChromeLauncherController::SetItemStatus( 389 void ChromeLauncherController::SetItemStatus(
390 ash::LauncherID id, 390 ash::LauncherID id,
391 ash::LauncherItemStatus status) { 391 ash::LauncherItemStatus status) {
392 int index = model_->ItemIndexByID(id); 392 int index = model_->ItemIndexByID(id);
393 ash::LauncherItemStatus old_status = model_->items()[index].status;
393 // Since ordinary browser windows are not registered, we might get a negative 394 // Since ordinary browser windows are not registered, we might get a negative
394 // index here. 395 // index here.
395 if (index >= 0) { 396 if (index >= 0 && old_status != status) {
396 ash::LauncherItem item = model_->items()[index]; 397 ash::LauncherItem item = model_->items()[index];
397 item.status = status; 398 item.status = status;
398 model_->Set(index, item); 399 model_->Set(index, item);
399 } 400 }
400 } 401 }
401 402
402 void ChromeLauncherController::SetItemController( 403 void ChromeLauncherController::SetItemController(
403 ash::LauncherID id, 404 ash::LauncherID id,
404 LauncherItemController* controller) { 405 LauncherItemController* controller) {
405 CHECK(controller); 406 CHECK(controller);
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after
827 ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER : 828 ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER :
828 ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS; 829 ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS;
829 SetShelfAutoHideBehaviorPrefs(behavior, root_window); 830 SetShelfAutoHideBehaviorPrefs(behavior, root_window);
830 return; 831 return;
831 } 832 }
832 833
833 void ChromeLauncherController::RemoveTabFromRunningApp( 834 void ChromeLauncherController::RemoveTabFromRunningApp(
834 WebContents* tab, 835 WebContents* tab,
835 const std::string& app_id) { 836 const std::string& app_id) {
836 web_contents_to_app_id_.erase(tab); 837 web_contents_to_app_id_.erase(tab);
838 // BrowserShortcutLauncherItemController::UpdateBrowserItemState() will update
839 // the state when no application is associated with the tab.
840 if (app_id.empty())
841 return;
842
837 AppIDToWebContentsListMap::iterator i_app_id = 843 AppIDToWebContentsListMap::iterator i_app_id =
838 app_id_to_web_contents_list_.find(app_id); 844 app_id_to_web_contents_list_.find(app_id);
839 if (i_app_id != app_id_to_web_contents_list_.end()) { 845 if (i_app_id != app_id_to_web_contents_list_.end()) {
840 WebContentsList* tab_list = &i_app_id->second; 846 WebContentsList* tab_list = &i_app_id->second;
841 tab_list->remove(tab); 847 tab_list->remove(tab);
842 if (tab_list->empty()) { 848 if (tab_list->empty()) {
843 app_id_to_web_contents_list_.erase(i_app_id); 849 app_id_to_web_contents_list_.erase(i_app_id);
844 i_app_id = app_id_to_web_contents_list_.end(); 850 i_app_id = app_id_to_web_contents_list_.end();
845 ash::LauncherID id = GetLauncherIDForAppID(app_id); 851 ash::LauncherID id = GetLauncherIDForAppID(app_id);
846 if (id) 852 if (id)
(...skipping 17 matching lines...) Expand all
864 std::string last_app_id = web_contents_to_app_id_[contents]; 870 std::string last_app_id = web_contents_to_app_id_[contents];
865 if (last_app_id != app_id) 871 if (last_app_id != app_id)
866 RemoveTabFromRunningApp(contents, last_app_id); 872 RemoveTabFromRunningApp(contents, last_app_id);
867 } 873 }
868 874
869 web_contents_to_app_id_[contents] = app_id; 875 web_contents_to_app_id_[contents] = app_id;
870 876
871 if (app_state == APP_STATE_REMOVED) { 877 if (app_state == APP_STATE_REMOVED) {
872 // The tab has gone away. 878 // The tab has gone away.
873 RemoveTabFromRunningApp(contents, app_id); 879 RemoveTabFromRunningApp(contents, app_id);
874 } else { 880 } else if (!app_id.empty()) {
875 WebContentsList& tab_list(app_id_to_web_contents_list_[app_id]); 881 WebContentsList& tab_list(app_id_to_web_contents_list_[app_id]);
876 882
877 if (app_state == APP_STATE_INACTIVE) { 883 if (app_state == APP_STATE_INACTIVE) {
878 WebContentsList::const_iterator i_tab = 884 WebContentsList::const_iterator i_tab =
879 std::find(tab_list.begin(), tab_list.end(), contents); 885 std::find(tab_list.begin(), tab_list.end(), contents);
880 if (i_tab == tab_list.end()) 886 if (i_tab == tab_list.end())
881 tab_list.push_back(contents); 887 tab_list.push_back(contents);
888 // TODO(simon.hong81): Does this below case exist?
882 if (i_tab != tab_list.begin()) { 889 if (i_tab != tab_list.begin()) {
883 // Going inactive, but wasn't the front tab, indicating that a new 890 // Going inactive, but wasn't the front tab, indicating that a new
884 // tab has already become active. 891 // tab has already become active.
885 return; 892 return;
886 } 893 }
887 } else { 894 } else {
888 tab_list.remove(contents); 895 tab_list.remove(contents);
889 tab_list.push_front(contents); 896 tab_list.push_front(contents);
890 } 897 }
891 ash::LauncherID id = GetLauncherIDForAppID(app_id); 898 ash::LauncherID id = GetLauncherIDForAppID(app_id);
(...skipping 997 matching lines...) Expand 10 before | Expand all | Expand 10 after
1889 } 1896 }
1890 1897
1891 void ChromeLauncherController::ReleaseProfile() { 1898 void ChromeLauncherController::ReleaseProfile() {
1892 if (app_sync_ui_state_) 1899 if (app_sync_ui_state_)
1893 app_sync_ui_state_->RemoveObserver(this); 1900 app_sync_ui_state_->RemoveObserver(this);
1894 1901
1895 PrefServiceSyncable::FromProfile(profile_)->RemoveObserver(this); 1902 PrefServiceSyncable::FromProfile(profile_)->RemoveObserver(this);
1896 1903
1897 pref_change_registrar_.RemoveAll(); 1904 pref_change_registrar_.RemoveAll();
1898 } 1905 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698