extension_app_item.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// found in the LICENSE file. 4a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 5e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#ifndef CHROME_BROWSER_UI_APP_LIST_EXTENSION_APP_ITEM_H_ 6e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#define CHROME_BROWSER_UI_APP_LIST_EXTENSION_APP_ITEM_H_ 7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include <string> 9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/extensions/extension_icon_image.h" 12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/ui/app_list/app_context_menu_delegate.h" 13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/ui/app_list/app_list_syncable_service.h" 14e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chrome/browser/ui/extensions/extension_enable_flow_delegate.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/app_list/app_list_item.h" 16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "ui/gfx/image/image_skia.h" 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class AppListControllerDelegate; 19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class ExtensionEnableFlow; 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class Profile; 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace app_list { 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class AppContextMenu; 24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace extensions { 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class ContextMenuMatcher; 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Extension; 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// ExtensionAppItem represents an extension app in app list. 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class ExtensionAppItem : public app_list::AppListItem, 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public extensions::IconImage::Observer, 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public ExtensionEnableFlowDelegate, 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public app_list::AppContextMenuDelegate { 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static const char kItemType[]; 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ExtensionAppItem(Profile* profile, 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const app_list::AppListSyncableService::SyncItem* sync_item, 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& extension_id, 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& extension_name, 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const gfx::ImageSkia& installing_icon, 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool is_platform_app); 45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual ~ExtensionAppItem(); 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Reload the title and icon from the underlying extension. 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void Reload(); 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Updates the app item's icon, if necessary adding an overlay and/or making 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // it gray. 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void UpdateIcon(); 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Only updates the icon if the overlay needs to be added/removed. 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void UpdateIconOverlay(); 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Update page and app launcher ordinals to put the app in between |prev| and 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // |next|. Note that |prev| and |next| could be NULL when the app is put at 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // the beginning or at the end. 60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void Move(const ExtensionAppItem* prev, const ExtensionAppItem* next); 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& extension_id() const { return extension_id_; } 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& extension_name() const { return extension_name_; } 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) private: 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Gets extension associated with this model. Returns NULL if extension 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // no longer exists. 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const extensions::Extension* GetExtension() const; 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Loads extension icon. 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void LoadImage(const extensions::Extension* extension); 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Checks if extension is disabled and if enable flow should be started. 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Returns true if extension enable flow is started or there is already one 75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // running. 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool RunExtensionEnableFlow(); 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Private equivalent to Activate(), without refocus for already-running apps. 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void Launch(int event_flags); 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Whether or not the app item needs an overlay. 82f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool NeedsOverlay() const; 83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Overridden from extensions::IconImage::Observer: 85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void OnExtensionIconImageChanged( 86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extensions::IconImage* image) OVERRIDE; 87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 88f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Overridden from ExtensionEnableFlowDelegate: 89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void ExtensionEnableFlowFinished() OVERRIDE; 90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void ExtensionEnableFlowAborted(bool user_initiated) OVERRIDE; 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Overridden from AppListItem: 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void Activate(int event_flags) OVERRIDE; 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ui::MenuModel* GetContextMenuModel() OVERRIDE; 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual const char* GetItemType() const OVERRIDE; 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Overridden from app_list::AppContextMenuDelegate: 985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void ExecuteLaunchCommand(int event_flags) OVERRIDE; 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Set the position from the extension ordering. 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void UpdatePositionFromExtensionOrdering(); 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Return the controller for the active desktop type. 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AppListControllerDelegate* GetController(); 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 106a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Profile* profile_; 1075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string extension_id_; 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<extensions::IconImage> icon_; 110a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<app_list::AppContextMenu> context_menu_; 111a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<ExtensionEnableFlow> extension_enable_flow_; 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AppListControllerDelegate* extension_enable_flow_controller_; 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Name to use for the extension if we can't access it. 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string extension_name_; 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Icon for the extension if we can't access the installed extension. 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::ImageSkia installing_icon_; 1195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Whether or not this app is a platform app. 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool is_platform_app_; 122a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 123a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Whether this app item has an overlay. 124a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool has_overlay_; 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(ExtensionAppItem); 127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 128a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // CHROME_BROWSER_UI_APP_LIST_EXTENSION_APP_ITEM_H_ 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)