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