extension_app_shim_handler_mac.h revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file. 490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#ifndef APPS_APP_SHIM_EXTENSION_APP_SHIM_HANDLER_H_ 690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define APPS_APP_SHIM_EXTENSION_APP_SHIM_HANDLER_H_ 790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <map> 990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <string> 1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "apps/app_lifetime_monitor.h" 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "apps/app_shim/app_shim_handler_mac.h" 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/memory/scoped_ptr.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/extensions/shell_window_registry.h" 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/public/browser/notification_observer.h" 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/public/browser/notification_registrar.h" 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class Profile; 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace base { 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass FilePath; 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace content { 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass WebContents; 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace extensions { 29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class Extension; 30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace apps { 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// This app shim handler that handles events for app shims that correspond to an 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// extension. 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class ExtensionAppShimHandler : public AppShimHandler, 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public content::NotificationObserver, 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public AppLifetimeMonitor::Observer { 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public: 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch class Delegate { 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual ~Delegate() {} 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual bool ProfileExistsForPath(const base::FilePath& path); 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual Profile* ProfileForPath(const base::FilePath& path); 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual extensions::ShellWindowRegistry::ShellWindowList GetWindows( 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Profile* profile, const std::string& extension_id); 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual const extensions::Extension* GetAppExtension( 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Profile* profile, const std::string& extension_id); 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void LaunchApp(Profile* profile, 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const extensions::Extension* extension); 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void LaunchShim(Profile* profile, 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const extensions::Extension* extension); 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void MaybeTerminate(); 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }; 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExtensionAppShimHandler(); 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~ExtensionAppShimHandler(); 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // AppShimHandler overrides: 64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual bool OnShimLaunch(Host* host, AppShimLaunchType launch_type) OVERRIDE; 6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnShimClose(Host* host) OVERRIDE; 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void OnShimFocus(Host* host, AppShimFocusType focus_type) OVERRIDE; 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void OnShimSetHidden(Host* host, bool hidden) OVERRIDE; 68868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void OnShimQuit(Host* host) OVERRIDE; 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // AppLifetimeMonitor::Observer overrides: 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void OnAppStart(Profile* profile, const std::string& app_id) OVERRIDE; 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void OnAppActivated(Profile* profile, 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& app_id) OVERRIDE; 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void OnAppDeactivated(Profile* profile, 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& app_id) OVERRIDE; 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void OnAppStop(Profile* profile, const std::string& app_id) OVERRIDE; 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void OnChromeTerminating() OVERRIDE; 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // content::NotificationObserver overrides: 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void Observe(int type, 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const content::NotificationSource& source, 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const content::NotificationDetails& details) OVERRIDE; 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) protected: 8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) typedef std::map<std::pair<Profile*, std::string>, AppShimHandler::Host*> 8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) HostMap; 8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Exposed for testing. 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void set_delegate(Delegate* delegate); 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) HostMap& hosts() { return hosts_; } 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::NotificationRegistrar& registrar() { return registrar_; } 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) private: 94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<Delegate> delegate_; 9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) HostMap hosts_; 9790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 9890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::NotificationRegistrar registrar_; 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool browser_opened_ever_; 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}; 10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace apps 10490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif // APPS_APP_SHIM_EXTENSION_APP_SHIM_HANDLER_H_ 106