| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/views/tabs/browser_tab_strip_controller.h" | 5 #include "chrome/browser/views/tabs/browser_tab_strip_controller.h" |
| 6 | 6 |
| 7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "chrome/browser/browser.h" | 9 #include "chrome/browser/browser.h" |
| 10 #include "chrome/browser/profile.h" | 10 #include "chrome/browser/profile.h" |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 // The last command that was selected, so that we can start/stop highlighting | 105 // The last command that was selected, so that we can start/stop highlighting |
| 106 // appropriately as the user moves through the menu. | 106 // appropriately as the user moves through the menu. |
| 107 TabStripModel::ContextMenuCommand last_command_; | 107 TabStripModel::ContextMenuCommand last_command_; |
| 108 | 108 |
| 109 DISALLOW_COPY_AND_ASSIGN(TabContextMenuContents); | 109 DISALLOW_COPY_AND_ASSIGN(TabContextMenuContents); |
| 110 }; | 110 }; |
| 111 | 111 |
| 112 //////////////////////////////////////////////////////////////////////////////// | 112 //////////////////////////////////////////////////////////////////////////////// |
| 113 // BrowserTabStripController, public: | 113 // BrowserTabStripController, public: |
| 114 | 114 |
| 115 BrowserTabStripController::BrowserTabStripController(TabStripModel* model) | 115 BrowserTabStripController::BrowserTabStripController(Browser* browser, |
| 116 TabStripModel* model) |
| 116 : model_(model), | 117 : model_(model), |
| 117 tabstrip_(NULL) { | 118 tabstrip_(NULL), |
| 119 browser_(browser) { |
| 118 model_->AddObserver(this); | 120 model_->AddObserver(this); |
| 119 | 121 |
| 120 notification_registrar_.Add(this, | 122 notification_registrar_.Add(this, |
| 121 NotificationType::TAB_CLOSEABLE_STATE_CHANGED, | 123 NotificationType::TAB_CLOSEABLE_STATE_CHANGED, |
| 122 NotificationService::AllSources()); | 124 NotificationService::AllSources()); |
| 123 } | 125 } |
| 124 | 126 |
| 125 BrowserTabStripController::~BrowserTabStripController() { | 127 BrowserTabStripController::~BrowserTabStripController() { |
| 126 // When we get here the TabStrip is being deleted. We need to explicitly | 128 // When we get here the TabStrip is being deleted. We need to explicitly |
| 127 // cancel the menu, otherwise it may try to invoke something on the tabstrip | 129 // cancel the menu, otherwise it may try to invoke something on the tabstrip |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 bool BrowserTabStripController::IsCompatibleWith(BaseTabStrip* other) const { | 264 bool BrowserTabStripController::IsCompatibleWith(BaseTabStrip* other) const { |
| 263 Profile* other_profile = | 265 Profile* other_profile = |
| 264 static_cast<BrowserTabStripController*>(other->controller())->profile(); | 266 static_cast<BrowserTabStripController*>(other->controller())->profile(); |
| 265 return other_profile == profile(); | 267 return other_profile == profile(); |
| 266 } | 268 } |
| 267 | 269 |
| 268 void BrowserTabStripController::CreateNewTab() { | 270 void BrowserTabStripController::CreateNewTab() { |
| 269 UserMetrics::RecordAction(UserMetricsAction("NewTab_Button"), | 271 UserMetrics::RecordAction(UserMetricsAction("NewTab_Button"), |
| 270 model_->profile()); | 272 model_->profile()); |
| 271 | 273 |
| 272 TabContents* selected_tab = model_->GetSelectedTabContents(); | 274 if (browser_ && browser_->OpenAppsPanelAsNewTab()) |
| 273 if (!selected_tab) | |
| 274 return; | |
| 275 | |
| 276 Browser* browser = selected_tab->delegate()->GetBrowser(); | |
| 277 if (browser->OpenAppsPanelAsNewTab()) | |
| 278 return; | 275 return; |
| 279 | 276 |
| 280 model_->delegate()->AddBlankTab(true); | 277 model_->delegate()->AddBlankTab(true); |
| 281 } | 278 } |
| 282 | 279 |
| 283 //////////////////////////////////////////////////////////////////////////////// | 280 //////////////////////////////////////////////////////////////////////////////// |
| 284 // BrowserTabStripController, TabStripModelObserver implementation: | 281 // BrowserTabStripController, TabStripModelObserver implementation: |
| 285 | 282 |
| 286 void BrowserTabStripController::TabInsertedAt(TabContents* contents, | 283 void BrowserTabStripController::TabInsertedAt(TabContents* contents, |
| 287 int model_index, | 284 int model_index, |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 int model_index) { | 358 int model_index) { |
| 362 TabRendererData data; | 359 TabRendererData data; |
| 363 SetTabRendererDataFromModel(contents, model_index, &data); | 360 SetTabRendererDataFromModel(contents, model_index, &data); |
| 364 tabstrip_->SetTabData(model_index, data); | 361 tabstrip_->SetTabData(model_index, data); |
| 365 } | 362 } |
| 366 | 363 |
| 367 void BrowserTabStripController::SetTabRendererDataFromModel( | 364 void BrowserTabStripController::SetTabRendererDataFromModel( |
| 368 TabContents* contents, | 365 TabContents* contents, |
| 369 int model_index, | 366 int model_index, |
| 370 TabRendererData* data) { | 367 TabRendererData* data) { |
| 371 SkBitmap* app_icon = contents->GetExtensionAppIcon(); | 368 SkBitmap* app_icon = NULL; |
| 369 |
| 370 // Extension App icons are slightly larger than favicons, so only allow |
| 371 // them if permitted by the model. |
| 372 if (model_->delegate()->LargeIconsPermitted()) |
| 373 app_icon = contents->GetExtensionAppIcon(); |
| 374 |
| 372 if (app_icon) | 375 if (app_icon) |
| 373 data->favicon = *app_icon; | 376 data->favicon = *app_icon; |
| 374 else | 377 else |
| 375 data->favicon = contents->GetFavIcon(); | 378 data->favicon = contents->GetFavIcon(); |
| 376 data->network_state = TabContentsNetworkState(contents); | 379 data->network_state = TabContentsNetworkState(contents); |
| 377 data->title = contents->GetTitle(); | 380 data->title = contents->GetTitle(); |
| 378 data->loading = contents->is_loading(); | 381 data->loading = contents->is_loading(); |
| 379 data->crashed = contents->is_crashed(); | 382 data->crashed = contents->is_crashed(); |
| 380 data->off_the_record = contents->profile()->IsOffTheRecord(); | 383 data->off_the_record = contents->profile()->IsOffTheRecord(); |
| 381 data->show_icon = contents->ShouldDisplayFavIcon(); | 384 data->show_icon = contents->ShouldDisplayFavIcon(); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 DCHECK(type.value == NotificationType::TAB_CLOSEABLE_STATE_CHANGED); | 423 DCHECK(type.value == NotificationType::TAB_CLOSEABLE_STATE_CHANGED); |
| 421 // Note that this notification may be fired during a model mutation and | 424 // Note that this notification may be fired during a model mutation and |
| 422 // possibly before the tabstrip has processed the change. | 425 // possibly before the tabstrip has processed the change. |
| 423 // Here, we just re-layout each existing tab to reflect the change in its | 426 // Here, we just re-layout each existing tab to reflect the change in its |
| 424 // closeable state, and then schedule paint for entire tabstrip. | 427 // closeable state, and then schedule paint for entire tabstrip. |
| 425 for (int i = 0; i < tabstrip_->tab_count(); ++i) { | 428 for (int i = 0; i < tabstrip_->tab_count(); ++i) { |
| 426 tabstrip_->base_tab_at_tab_index(i)->Layout(); | 429 tabstrip_->base_tab_at_tab_index(i)->Layout(); |
| 427 } | 430 } |
| 428 tabstrip_->SchedulePaint(); | 431 tabstrip_->SchedulePaint(); |
| 429 } | 432 } |
| OLD | NEW |