12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/ash/launcher/chrome_launcher_app_menu_item_browser.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/wm/window_util.h" 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_finder.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/notification_service.h" 14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event_constants.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ChromeLauncherAppMenuItemBrowser::ChromeLauncherAppMenuItemBrowser( 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 title, 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Image* icon, 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser* browser, 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool has_leading_separator) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : ChromeLauncherAppMenuItem(title, icon, has_leading_separator), 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_(browser) { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registrar_.Add(this, 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::NOTIFICATION_BROWSER_CLOSING, 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::Source<Browser>(browser)); 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ChromeLauncherAppMenuItemBrowser::IsActive() const { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return browser_ == chrome::FindBrowserWithWindow(ash::wm::GetActiveWindow()); 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ChromeLauncherAppMenuItemBrowser::IsEnabled() const { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ChromeLauncherAppMenuItemBrowser::Execute(int event_flags) { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (browser_) { 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (event_flags & (ui::EF_SHIFT_DOWN | ui::EF_MIDDLE_MOUSE_BUTTON)) { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabStripModel* tab_strip = browser_->tab_strip_model(); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_strip->CloseAllTabs(); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_->window()->Show(); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::wm::ActivateWindow(browser_->window()->GetNativeWindow()); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ChromeLauncherAppMenuItemBrowser::Observe( 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int type, 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationSource& source, 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationDetails& details) { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (type) { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case chrome::NOTIFICATION_BROWSER_CLOSING: 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_EQ(browser_, content::Source<Browser>(source).ptr()); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_ = NULL; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 62