Home | History | Annotate | Download | only in launcher
      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
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/ui/ash/launcher/chrome_launcher_app_menu_item_browser.h"
      6 
      7 #include "ash/wm/window_util.h"
      8 #include "chrome/browser/chrome_notification_types.h"
      9 #include "chrome/browser/ui/browser.h"
     10 #include "chrome/browser/ui/browser_finder.h"
     11 #include "chrome/browser/ui/browser_window.h"
     12 #include "chrome/browser/ui/tabs/tab_strip_model.h"
     13 #include "content/public/browser/notification_service.h"
     14 #include "ui/events/event_constants.h"
     15 
     16 ChromeLauncherAppMenuItemBrowser::ChromeLauncherAppMenuItemBrowser(
     17     const base::string16 title,
     18     const gfx::Image* icon,
     19     Browser* browser,
     20     bool has_leading_separator)
     21     : ChromeLauncherAppMenuItem(title, icon, has_leading_separator),
     22       browser_(browser) {
     23   DCHECK(browser);
     24   registrar_.Add(this,
     25                  chrome::NOTIFICATION_BROWSER_CLOSING,
     26                  content::Source<Browser>(browser));
     27 }
     28 ChromeLauncherAppMenuItemBrowser::~ChromeLauncherAppMenuItemBrowser() {
     29 }
     30 
     31 bool ChromeLauncherAppMenuItemBrowser::IsActive() const {
     32   return browser_ == chrome::FindBrowserWithWindow(ash::wm::GetActiveWindow());
     33 }
     34 
     35 bool ChromeLauncherAppMenuItemBrowser::IsEnabled() const {
     36   return true;
     37 }
     38 
     39 void ChromeLauncherAppMenuItemBrowser::Execute(int event_flags) {
     40   if (browser_) {
     41     if (event_flags & (ui::EF_SHIFT_DOWN | ui::EF_MIDDLE_MOUSE_BUTTON)) {
     42       TabStripModel* tab_strip = browser_->tab_strip_model();
     43       tab_strip->CloseAllTabs();
     44     } else {
     45       browser_->window()->Show();
     46       ash::wm::ActivateWindow(browser_->window()->GetNativeWindow());
     47     }
     48   }
     49 }
     50 
     51 void ChromeLauncherAppMenuItemBrowser::Observe(
     52     int type,
     53     const content::NotificationSource& source,
     54     const content::NotificationDetails& details) {
     55   switch (type) {
     56     case chrome::NOTIFICATION_BROWSER_CLOSING:
     57       DCHECK_EQ(browser_, content::Source<Browser>(source).ptr());
     58       browser_ = NULL;
     59       break;
     60 
     61     default:
     62       NOTREACHED();
     63   }
     64 }
     65