| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "athena/extensions/public/extension_app_model_builder.h" |
| |
| #include "athena/activity/public/activity_factory.h" |
| #include "athena/activity/public/activity_manager.h" |
| #include "athena/extensions/public/extensions_delegate.h" |
| #include "extensions/browser/extension_icon_image.h" |
| #include "extensions/common/constants.h" |
| #include "extensions/common/extension_set.h" |
| #include "extensions/common/manifest_handlers/icons_handler.h" |
| #include "extensions/grit/extensions_browser_resources.h" |
| #include "ui/app_list/app_list_item.h" |
| #include "ui/app_list/app_list_model.h" |
| #include "ui/base/resource/resource_bundle.h" |
| |
| namespace athena { |
| |
| namespace { |
| |
| class AppItem : public app_list::AppListItem { |
| public: |
| AppItem(scoped_refptr<const extensions::Extension> extension, |
| content::BrowserContext* browser_context) |
| : app_list::AppListItem(extension->id()), |
| extension_(extension), |
| browser_context_(browser_context), |
| icon_image_(browser_context_, |
| extension.get(), |
| extensions::IconsInfo::GetIcons(extension.get()), |
| extension_misc::EXTENSION_ICON_MEDIUM, |
| *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
| IDR_APP_DEFAULT_ICON), |
| NULL) { |
| icon_image_.image_skia().EnsureRepsForSupportedScales(); |
| SetIcon(icon_image_.image_skia(), false); |
| SetName(extension->name()); |
| } |
| |
| private: |
| // Overridden from app_list::AppListItem: |
| virtual void Activate(int event_flags) override { |
| ExtensionsDelegate::Get(browser_context_)->LaunchApp(extension_->id()); |
| } |
| |
| scoped_refptr<const extensions::Extension> extension_; |
| content::BrowserContext* browser_context_; |
| extensions::IconImage icon_image_; |
| |
| DISALLOW_COPY_AND_ASSIGN(AppItem); |
| }; |
| |
| } // namespace |
| |
| ExtensionAppModelBuilder::ExtensionAppModelBuilder( |
| content::BrowserContext* browser_context) |
| : browser_context_(browser_context) { |
| } |
| |
| ExtensionAppModelBuilder::~ExtensionAppModelBuilder() { |
| } |
| |
| void ExtensionAppModelBuilder::PopulateApps(app_list::AppListModel* model) { |
| ExtensionsDelegate* bridge = ExtensionsDelegate::Get(browser_context_); |
| const extensions::ExtensionSet& extensions = bridge->GetInstalledExtensions(); |
| for (extensions::ExtensionSet::const_iterator iter = extensions.begin(); |
| iter != extensions.end(); |
| ++iter) { |
| // TODO(mukai): use chrome/browser/extension_ui_util. |
| if ((*iter)->ShouldDisplayInAppLauncher()) { |
| model->AddItem(scoped_ptr<app_list::AppListItem>( |
| new AppItem(*iter, browser_context_))); |
| } |
| } |
| } |
| |
| } // namespace athena |