Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 1703 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1714 } | 1714 } |
| 1715 } | 1715 } |
| 1716 | 1716 |
| 1717 void ChromeLauncherController::SetShelfBehaviorsFromPrefs() { | 1717 void ChromeLauncherController::SetShelfBehaviorsFromPrefs() { |
| 1718 SetShelfAutoHideBehaviorFromPrefs(); | 1718 SetShelfAutoHideBehaviorFromPrefs(); |
| 1719 SetShelfAlignmentFromPrefs(); | 1719 SetShelfAlignmentFromPrefs(); |
| 1720 } | 1720 } |
| 1721 | 1721 |
| 1722 WebContents* ChromeLauncherController::GetLastActiveWebContents( | 1722 WebContents* ChromeLauncherController::GetLastActiveWebContents( |
| 1723 const std::string& app_id) { | 1723 const std::string& app_id) { |
| 1724 AppIDToWebContentsListMap::const_iterator i = | 1724 AppIDToWebContentsListMap::iterator i = |
| 1725 app_id_to_web_contents_list_.find(app_id); | 1725 app_id_to_web_contents_list_.find(app_id); |
| 1726 if (i == app_id_to_web_contents_list_.end()) | 1726 if (i == app_id_to_web_contents_list_.end()) |
| 1727 return NULL; | 1727 return NULL; |
| 1728 DCHECK_GT(i->second.size(), 0u); | 1728 |
| 1729 return *i->second.begin(); | 1729 // There are many crash records (crbug.com/341250) which indicate that the |
| 1730 // app_id_to_web_contents_list_ contains deleted content entries - so there | |
| 1731 // must be a way that the content does not get properly updated. To fix | |
| 1732 // M33 and M34 we filter out the invalid items here, but this should be | |
| 1733 // addressed by a later patch correctly. Looking at the code however, the | |
| 1734 // real culprit is possibly BrowserStatusMonitor::UpdateAppItemState which | |
| 1735 // does not call "UpdateAppState(.., APP_STATE_REMOVED)" because due to a | |
| 1736 // Browser::SwapTabContent operation it isn't able to get the browser. I | |
| 1737 // think that the real patch is to call anyway when APP_STATE_REMOVED is | |
| 1738 // requested, but for a backport that seems risky. | |
| 1739 while (true) { | |
| 1740 if (!i->second.size()) { | |
|
James Cook
2014/02/12 19:23:29
I think this might be clearer if you stored i->sec
Mr4D (OOO till 08-26)
2014/02/12 20:39:03
Done!
| |
| 1741 app_id_to_web_contents_list_.erase(app_id); | |
| 1742 return NULL; | |
| 1743 } | |
| 1744 WebContents* contents = *i->second.begin(); | |
| 1745 if (chrome::FindBrowserWithWebContents(contents)) | |
| 1746 return contents; | |
| 1747 i->second.erase(i->second.begin()); | |
| 1748 // This might not be necessary, but since we do not know why the lists | |
| 1749 // diverged we also erase it since it cannot be correct either. | |
| 1750 web_contents_to_app_id_.erase(contents); | |
| 1751 } | |
| 1730 } | 1752 } |
| 1731 | 1753 |
| 1732 ash::ShelfID ChromeLauncherController::InsertAppLauncherItem( | 1754 ash::ShelfID ChromeLauncherController::InsertAppLauncherItem( |
| 1733 LauncherItemController* controller, | 1755 LauncherItemController* controller, |
| 1734 const std::string& app_id, | 1756 const std::string& app_id, |
| 1735 ash::ShelfItemStatus status, | 1757 ash::ShelfItemStatus status, |
| 1736 int index, | 1758 int index, |
| 1737 ash::ShelfItemType shelf_item_type) { | 1759 ash::ShelfItemType shelf_item_type) { |
| 1738 ash::ShelfID id = model_->next_id(); | 1760 ash::ShelfID id = model_->next_id(); |
| 1739 CHECK(!HasItemController(id)); | 1761 CHECK(!HasItemController(id)); |
| (...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2037 } | 2059 } |
| 2038 | 2060 |
| 2039 void ChromeLauncherController::ReleaseProfile() { | 2061 void ChromeLauncherController::ReleaseProfile() { |
| 2040 if (app_sync_ui_state_) | 2062 if (app_sync_ui_state_) |
| 2041 app_sync_ui_state_->RemoveObserver(this); | 2063 app_sync_ui_state_->RemoveObserver(this); |
| 2042 | 2064 |
| 2043 PrefServiceSyncable::FromProfile(profile_)->RemoveObserver(this); | 2065 PrefServiceSyncable::FromProfile(profile_)->RemoveObserver(this); |
| 2044 | 2066 |
| 2045 pref_change_registrar_.RemoveAll(); | 2067 pref_change_registrar_.RemoveAll(); |
| 2046 } | 2068 } |
| OLD | NEW |