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

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

Issue 22887015: Remove PerBrowser launcher (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix nit Created 7 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/browser_launcher_item_controller.h" 5 #include "chrome/browser/ui/ash/launcher/browser_launcher_item_controller.h"
6 6
7 #include "ash/launcher/launcher.h" 7 #include "ash/launcher/launcher.h"
8 #include "ash/launcher/launcher_model.h" 8 #include "ash/launcher/launcher_model.h"
9 #include "ash/shell.h" 9 #include "ash/shell.h"
10 #include "ash/wm/window_util.h" 10 #include "ash/wm/window_util.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 if (type() == TYPE_WINDOWED_APP) 56 if (type() == TYPE_WINDOWED_APP)
57 return empty_app_id_; 57 return empty_app_id_;
58 return LauncherItemController::app_id(); 58 return LauncherItemController::app_id();
59 } 59 }
60 60
61 void BrowserLauncherItemController::Init() { 61 void BrowserLauncherItemController::Init() {
62 tab_model_->AddObserver(this); 62 tab_model_->AddObserver(this);
63 ash::LauncherItemStatus app_status = 63 ash::LauncherItemStatus app_status =
64 ash::wm::IsActiveWindow(window_) ? 64 ash::wm::IsActiveWindow(window_) ?
65 ash::STATUS_ACTIVE : ash::STATUS_RUNNING; 65 ash::STATUS_ACTIVE : ash::STATUS_RUNNING;
66 if (type() != TYPE_TABBED && type() != TYPE_WINDOWED_APP) { 66 if (type() != TYPE_TABBED && type() != TYPE_WINDOWED_APP)
67 launcher_controller()->CreateAppLauncherItem(this, app_id(), app_status); 67 launcher_controller()->CreateAppLauncherItem(this, app_id(), app_status);
68 } else { 68 else if (type() == TYPE_WINDOWED_APP)
69 launcher_controller()->CreateTabbedLauncherItem( 69 launcher_controller()->LockV1AppWithID(LauncherItemController::app_id());
70 this, 70
71 is_incognito_ ? ChromeLauncherController::STATE_INCOGNITO :
72 ChromeLauncherController::STATE_NOT_INCOGNITO,
73 app_status);
74 if (type() == TYPE_WINDOWED_APP)
75 launcher_controller()->LockV1AppWithID(LauncherItemController::app_id());
76 }
77 // In testing scenarios we can get tab strips with no active contents. 71 // In testing scenarios we can get tab strips with no active contents.
78 if (tab_model_->active_index() != TabStripModel::kNoTab) 72 if (tab_model_->active_index() != TabStripModel::kNoTab)
79 UpdateLauncher(tab_model_->GetActiveWebContents()); 73 UpdateLauncher(tab_model_->GetActiveWebContents());
80 } 74 }
81 75
82 // static 76 // static
83 BrowserLauncherItemController* BrowserLauncherItemController::Create( 77 BrowserLauncherItemController* BrowserLauncherItemController::Create(
84 Browser* browser) { 78 Browser* browser) {
85 // Under testing this can be called before the controller is created. 79 // Under testing this can be called before the controller is created.
86 if (!ChromeLauncherController::instance()) 80 if (!ChromeLauncherController::instance())
87 return NULL; 81 return NULL;
88 82
89 Type type; 83 Type type;
90 std::string app_id; 84 std::string app_id;
91 if (browser->is_type_tabbed() || browser->is_type_popup()) { 85 if (browser->is_type_tabbed() || browser->is_type_popup()) {
92 type = TYPE_TABBED; 86 type = TYPE_TABBED;
93 if (!browser->is_type_tabbed() && 87 if (!browser->is_type_tabbed() &&
94 browser->is_type_popup() && 88 browser->is_type_popup() &&
95 browser->is_app() && 89 browser->is_app()) {
96 ChromeLauncherController::instance()->GetPerAppInterface()) {
97 app_id = web_app::GetExtensionIdFromApplicationName( 90 app_id = web_app::GetExtensionIdFromApplicationName(
98 browser->app_name()); 91 browser->app_name());
99 // Only allow this for known applications. Some unit tests for example 92 // Only allow this for known applications. Some unit tests for example
100 // do not have one. 93 // do not have one.
101 if (!app_id.empty()) 94 if (!app_id.empty())
102 type = TYPE_WINDOWED_APP; 95 type = TYPE_WINDOWED_APP;
103 } 96 }
104 } else if (browser->is_app()) { 97 } else if (browser->is_app()) {
105 type = TYPE_TABBED; 98 type = TYPE_TABBED;
106 app_id = web_app::GetExtensionIdFromApplicationName(browser->app_name()); 99 app_id = web_app::GetExtensionIdFromApplicationName(browser->app_name());
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 Activate(); 166 Activate();
174 } 167 }
175 } 168 }
176 169
177 void BrowserLauncherItemController::OnRemoved() { 170 void BrowserLauncherItemController::OnRemoved() {
178 } 171 }
179 172
180 void BrowserLauncherItemController::LauncherItemChanged( 173 void BrowserLauncherItemController::LauncherItemChanged(
181 int index, 174 int index,
182 const ash::LauncherItem& old_item) { 175 const ash::LauncherItem& old_item) {
183 if (!launcher_controller()->GetPerAppInterface() &&
184 launcher_model()->items()[index].status == ash::STATUS_ACTIVE &&
185 old_item.status == ash::STATUS_RUNNING) {
186 Activate();
187 }
188 } 176 }
189 177
190 ChromeLauncherAppMenuItems 178 ChromeLauncherAppMenuItems
191 BrowserLauncherItemController::GetApplicationList(int event_flags) { 179 BrowserLauncherItemController::GetApplicationList(int event_flags) {
192 // This will never be called and the entire class will go away. 180 // This will never be called and the entire class will go away.
193 ChromeLauncherAppMenuItems items; 181 ChromeLauncherAppMenuItems items;
194 return items.Pass(); 182 return items.Pass();
195 } 183 }
196 184
197 void BrowserLauncherItemController::ActiveTabChanged( 185 void BrowserLauncherItemController::ActiveTabChanged(
198 content::WebContents* old_contents, 186 content::WebContents* old_contents,
199 content::WebContents* new_contents, 187 content::WebContents* new_contents,
200 int index, 188 int index,
201 int reason) { 189 int reason) {
202 // Update immediately on a tab change. 190 // Update immediately on a tab change.
203 if (old_contents && 191 if (old_contents &&
204 (!launcher_controller()->GetPerAppInterface() || 192 TabStripModel::kNoTab !=
205 TabStripModel::kNoTab != 193 tab_model_->GetIndexOfWebContents(old_contents))
206 tab_model_->GetIndexOfWebContents(old_contents)))
207 UpdateAppState(old_contents); 194 UpdateAppState(old_contents);
208 UpdateAppState(new_contents); 195 UpdateAppState(new_contents);
209 UpdateLauncher(new_contents); 196 UpdateLauncher(new_contents);
210 } 197 }
211 198
212 void BrowserLauncherItemController::TabInsertedAt( 199 void BrowserLauncherItemController::TabInsertedAt(
213 content::WebContents* contents, 200 content::WebContents* contents,
214 int index, 201 int index,
215 bool foreground) { 202 bool foreground) {
216 UpdateAppState(contents); 203 UpdateAppState(contents);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 237
251 void BrowserLauncherItemController::OnWindowPropertyChanged( 238 void BrowserLauncherItemController::OnWindowPropertyChanged(
252 aura::Window* window, 239 aura::Window* window,
253 const void* key, 240 const void* key,
254 intptr_t old) { 241 intptr_t old) {
255 if (key == aura::client::kDrawAttentionKey) 242 if (key == aura::client::kDrawAttentionKey)
256 UpdateItemStatus(); 243 UpdateItemStatus();
257 } 244 }
258 245
259 void BrowserLauncherItemController::UpdateItemStatus() { 246 void BrowserLauncherItemController::UpdateItemStatus() {
260 if (launcher_controller()->GetPerAppInterface())
261 return;
262
263 ash::LauncherItemStatus status;
264 if (ash::wm::IsActiveWindow(window_)) {
265 // Clear attention state if active.
266 if (window_->GetProperty(aura::client::kDrawAttentionKey))
267 window_->SetProperty(aura::client::kDrawAttentionKey, false);
268 status = ash::STATUS_ACTIVE;
269 } else if (window_->GetProperty(aura::client::kDrawAttentionKey)) {
270 status = ash::STATUS_ATTENTION;
271 } else {
272 status = ash::STATUS_RUNNING;
273 }
274 launcher_controller()->SetItemStatus(launcher_id(), status);
275 } 247 }
276 248
277 void BrowserLauncherItemController::UpdateLauncher(content::WebContents* tab) { 249 void BrowserLauncherItemController::UpdateLauncher(content::WebContents* tab) {
278 if (launcher_controller()->GetPerAppInterface())
279 return;
280
281 if (type() == TYPE_APP_PANEL)
282 return; // Maintained entirely by ChromeLauncherController.
283
284 if (!tab)
285 return; // Assume the window is going to be closed if there are no tabs.
286
287 int item_index = launcher_model()->ItemIndexByID(launcher_id());
288 if (item_index == -1)
289 return;
290
291 ash::LauncherItem item = launcher_model()->items()[item_index];
292 DCHECK_EQ(TYPE_TABBED, type());
293 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
294 FaviconTabHelper* favicon_tab_helper =
295 FaviconTabHelper::FromWebContents(tab);
296 if (favicon_tab_helper->ShouldDisplayFavicon()) {
297 item.image = favicon_tab_helper->GetFavicon().AsImageSkia();
298 if (item.image.isNull()) {
299 item.image = *rb.GetImageSkiaNamed(IDR_DEFAULT_FAVICON);
300 }
301 } else {
302 item.image = *rb.GetImageSkiaNamed(IDR_DEFAULT_FAVICON);
303 }
304 launcher_model()->Set(item_index, item);
305 } 250 }
306 251
307 void BrowserLauncherItemController::UpdateAppState(content::WebContents* tab) { 252 void BrowserLauncherItemController::UpdateAppState(content::WebContents* tab) {
308 ChromeLauncherController::AppState app_state; 253 ChromeLauncherController::AppState app_state;
309 254
310 if (!launcher_controller()->GetPerAppInterface() && 255 if (tab_model_->GetActiveWebContents() == tab) {
311 tab_model_->GetIndexOfWebContents(tab) == TabStripModel::kNoTab) {
312 app_state = ChromeLauncherController::APP_STATE_REMOVED;
313 } else if (tab_model_->GetActiveWebContents() == tab) {
314 if (ash::wm::IsActiveWindow(window_)) 256 if (ash::wm::IsActiveWindow(window_))
315 app_state = ChromeLauncherController::APP_STATE_WINDOW_ACTIVE; 257 app_state = ChromeLauncherController::APP_STATE_WINDOW_ACTIVE;
316 else 258 else
317 app_state = ChromeLauncherController::APP_STATE_ACTIVE; 259 app_state = ChromeLauncherController::APP_STATE_ACTIVE;
318 } else { 260 } else {
319 app_state = ChromeLauncherController::APP_STATE_INACTIVE; 261 app_state = ChromeLauncherController::APP_STATE_INACTIVE;
320 } 262 }
321 launcher_controller()->UpdateAppState(tab, app_state); 263 launcher_controller()->UpdateAppState(tab, app_state);
322 } 264 }
323 265
324 ash::LauncherModel* BrowserLauncherItemController::launcher_model() { 266 ash::LauncherModel* BrowserLauncherItemController::launcher_model() {
325 return launcher_controller()->model(); 267 return launcher_controller()->model();
326 } 268 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698