| Index: chrome/browser/ui/views/apps/app_info_dialog/app_info_header_panel.cc
|
| diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_header_panel.cc b/chrome/browser/ui/views/apps/app_info_dialog/app_info_header_panel.cc
|
| deleted file mode 100644
|
| index 968dd259df6b0e9b16e0d3058ad93e955554bd4e..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/views/apps/app_info_dialog/app_info_header_panel.cc
|
| +++ /dev/null
|
| @@ -1,319 +0,0 @@
|
| -// 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 "chrome/browser/ui/views/apps/app_info_dialog/app_info_header_panel.h"
|
| -
|
| -#include <vector>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "chrome/browser/extensions/extension_service.h"
|
| -#include "chrome/browser/extensions/extension_uninstall_dialog.h"
|
| -#include "chrome/browser/extensions/extension_util.h"
|
| -#include "chrome/browser/extensions/image_loader.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/ui/browser_navigator.h"
|
| -#include "chrome/common/extensions/extension_constants.h"
|
| -#include "chrome/common/extensions/manifest_url_handler.h"
|
| -#include "extensions/browser/extension_system.h"
|
| -#include "extensions/browser/management_policy.h"
|
| -#include "extensions/common/constants.h"
|
| -#include "extensions/common/extension.h"
|
| -#include "extensions/common/extension_icon_set.h"
|
| -#include "extensions/common/extension_resource.h"
|
| -#include "extensions/common/manifest_handlers/icons_handler.h"
|
| -#include "extensions/common/manifest_handlers/shared_module_info.h"
|
| -#include "grit/generated_resources.h"
|
| -#include "net/base/url_util.h"
|
| -#include "third_party/skia/include/core/SkBitmap.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -#include "ui/base/resource/resource_bundle.h"
|
| -#include "ui/gfx/geometry/size.h"
|
| -#include "ui/gfx/image/image.h"
|
| -#include "ui/gfx/image/image_skia.h"
|
| -#include "ui/gfx/image/image_skia_rep.h"
|
| -#include "ui/gfx/native_widget_types.h"
|
| -#include "ui/gfx/text_constants.h"
|
| -#include "ui/views/controls/image_view.h"
|
| -#include "ui/views/controls/label.h"
|
| -#include "ui/views/controls/link.h"
|
| -#include "ui/views/layout/box_layout.h"
|
| -#include "ui/views/layout/grid_layout.h"
|
| -#include "ui/views/layout/layout_constants.h"
|
| -#include "ui/views/widget/widget.h"
|
| -#include "url/gurl.h"
|
| -
|
| -// Size of extension icon in top left of dialog.
|
| -const int kIconSize = 64;
|
| -
|
| -AppInfoHeaderPanel::AppInfoHeaderPanel(gfx::NativeWindow parent_window,
|
| - Profile* profile,
|
| - const extensions::Extension* app,
|
| - const base::Closure& close_callback)
|
| - : AppInfoPanel(parent_window, profile, app, close_callback),
|
| - app_icon_(NULL),
|
| - app_name_label_(NULL),
|
| - app_version_label_(NULL),
|
| - view_in_store_link_(NULL),
|
| - remove_link_(NULL),
|
| - licenses_link_(NULL),
|
| - weak_ptr_factory_(this) {
|
| - CreateControls();
|
| -
|
| - SetLayoutManager(
|
| - new views::BoxLayout(views::BoxLayout::kHorizontal,
|
| - views::kButtonHEdgeMargin,
|
| - views::kButtonVEdgeMargin,
|
| - views::kRelatedControlHorizontalSpacing));
|
| -
|
| - LayoutControls();
|
| -}
|
| -
|
| -AppInfoHeaderPanel::~AppInfoHeaderPanel() {
|
| -}
|
| -
|
| -void AppInfoHeaderPanel::CreateControls() {
|
| - app_name_label_ =
|
| - new views::Label(base::UTF8ToUTF16(app_->name()),
|
| - ui::ResourceBundle::GetSharedInstance().GetFontList(
|
| - ui::ResourceBundle::BoldFont));
|
| - app_name_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
|
| -
|
| - // The version number doesn't make sense for bookmarked apps.
|
| - if (!app_->from_bookmark()) {
|
| - app_version_label_ =
|
| - new views::Label(base::UTF8ToUTF16(app_->VersionString()));
|
| - app_version_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
|
| - }
|
| -
|
| - app_icon_ = new views::ImageView();
|
| - app_icon_->SetImageSize(gfx::Size(kIconSize, kIconSize));
|
| - LoadAppImageAsync();
|
| -
|
| - if (CanShowAppInWebStore()) {
|
| - view_in_store_link_ = new views::Link(
|
| - l10n_util::GetStringUTF16(IDS_APPLICATION_INFO_WEB_STORE_LINK));
|
| - view_in_store_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
|
| - view_in_store_link_->set_listener(this);
|
| - }
|
| -
|
| - if (CanUninstallApp()) {
|
| - remove_link_ = new views::Link(
|
| - l10n_util::GetStringUTF16(IDS_APPLICATION_INFO_UNINSTALL_BUTTON_TEXT));
|
| - remove_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
|
| - remove_link_->set_listener(this);
|
| - }
|
| -
|
| - if (CanDisplayLicenses()) {
|
| - licenses_link_ = new views::Link(
|
| - l10n_util::GetStringUTF16(IDS_APPLICATION_INFO_LICENSES_BUTTON_TEXT));
|
| - licenses_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
|
| - licenses_link_->set_listener(this);
|
| - }
|
| -}
|
| -
|
| -void AppInfoHeaderPanel::LayoutAppNameAndVersionInto(views::View* parent_view) {
|
| - views::View* view = new views::View();
|
| - // We need a horizontal BoxLayout here to ensure that the GridLayout does
|
| - // not stretch beyond the size of its content.
|
| - view->SetLayoutManager(
|
| - new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0));
|
| -
|
| - views::View* container_view = new views::View();
|
| - view->AddChildView(container_view);
|
| - views::GridLayout* layout = new views::GridLayout(container_view);
|
| - container_view->SetLayoutManager(layout);
|
| -
|
| - static const int kColumnId = 1;
|
| - views::ColumnSet* column_set = layout->AddColumnSet(kColumnId);
|
| - column_set->AddColumn(views::GridLayout::LEADING,
|
| - views::GridLayout::LEADING,
|
| - 1, // Stretch the title to as wide as needed
|
| - views::GridLayout::USE_PREF,
|
| - 0,
|
| - 0);
|
| - column_set->AddPaddingColumn(0, views::kRelatedControlSmallHorizontalSpacing);
|
| - column_set->AddColumn(views::GridLayout::LEADING,
|
| - views::GridLayout::LEADING,
|
| - 0, // Do not stretch the version
|
| - views::GridLayout::USE_PREF,
|
| - 0,
|
| - 0);
|
| -
|
| - layout->StartRow(1, kColumnId);
|
| - layout->AddView(app_name_label_);
|
| - if (app_version_label_)
|
| - layout->AddView(app_version_label_);
|
| -
|
| - parent_view->AddChildView(view);
|
| -}
|
| -
|
| -void AppInfoHeaderPanel::LayoutControls() {
|
| - AddChildView(app_icon_);
|
| -
|
| - if (!app_version_label_ && !view_in_store_link_) {
|
| - // If there's no link to the webstore _and_ no version, allow the app's name
|
| - // to take up multiple lines.
|
| - app_name_label_->SetMultiLine(true);
|
| - AddChildView(app_name_label_);
|
| - } else {
|
| - // Create a vertical container to store the app's name and info.
|
| - views::View* vertical_info_container = new views::View();
|
| - views::BoxLayout* vertical_container_layout =
|
| - new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0);
|
| - vertical_container_layout->set_main_axis_alignment(
|
| - views::BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER);
|
| - vertical_info_container->SetLayoutManager(vertical_container_layout);
|
| -
|
| - // Create a horizontal container to store the app's links.
|
| - views::View* horizontal_links_container = new views::View();
|
| - horizontal_links_container->SetLayoutManager(
|
| - new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 3));
|
| -
|
| - if (view_in_store_link_)
|
| - horizontal_links_container->AddChildView(view_in_store_link_);
|
| - if (remove_link_)
|
| - horizontal_links_container->AddChildView(remove_link_);
|
| - if (licenses_link_)
|
| - horizontal_links_container->AddChildView(licenses_link_);
|
| -
|
| - // First line: title and (possibly) version. Second line: links (if any).
|
| - if (app_version_label_) {
|
| - LayoutAppNameAndVersionInto(vertical_info_container);
|
| - } else {
|
| - vertical_info_container->AddChildView(app_name_label_);
|
| - }
|
| -
|
| - if (vertical_info_container->child_count() > 0)
|
| - vertical_info_container->AddChildView(horizontal_links_container);
|
| -
|
| - AddChildView(vertical_info_container);
|
| - }
|
| -}
|
| -
|
| -void AppInfoHeaderPanel::LinkClicked(views::Link* source, int event_flags) {
|
| - if (source == view_in_store_link_) {
|
| - ShowAppInWebStore();
|
| - } else if (source == remove_link_) {
|
| - UninstallApp();
|
| - } else if (source == licenses_link_) {
|
| - DisplayLicenses();
|
| - } else {
|
| - NOTREACHED();
|
| - }
|
| -}
|
| -
|
| -void AppInfoHeaderPanel::ExtensionUninstallAccepted() {
|
| - ExtensionService* service =
|
| - extensions::ExtensionSystem::Get(profile_)->extension_service();
|
| - service->UninstallExtension(app_->id(), false, NULL);
|
| -
|
| - // Close the App Info dialog as well (which will free the dialog too).
|
| - GetWidget()->Close();
|
| -}
|
| -
|
| -void AppInfoHeaderPanel::ExtensionUninstallCanceled() {
|
| - extension_uninstall_dialog_.reset();
|
| -}
|
| -
|
| -void AppInfoHeaderPanel::LoadAppImageAsync() {
|
| - extensions::ExtensionResource image = extensions::IconsInfo::GetIconResource(
|
| - app_,
|
| - extension_misc::EXTENSION_ICON_LARGE,
|
| - ExtensionIconSet::MATCH_BIGGER);
|
| - int pixel_size =
|
| - static_cast<int>(kIconSize * gfx::ImageSkia::GetMaxSupportedScale());
|
| - extensions::ImageLoader::Get(profile_)->LoadImageAsync(
|
| - app_,
|
| - image,
|
| - gfx::Size(pixel_size, pixel_size),
|
| - base::Bind(&AppInfoHeaderPanel::OnAppImageLoaded, AsWeakPtr()));
|
| -}
|
| -
|
| -void AppInfoHeaderPanel::OnAppImageLoaded(const gfx::Image& image) {
|
| - const SkBitmap* bitmap;
|
| - if (image.IsEmpty()) {
|
| - bitmap = &extensions::util::GetDefaultAppIcon()
|
| - .GetRepresentation(gfx::ImageSkia::GetMaxSupportedScale())
|
| - .sk_bitmap();
|
| - } else {
|
| - bitmap = image.ToSkBitmap();
|
| - }
|
| -
|
| - app_icon_->SetImage(gfx::ImageSkia::CreateFrom1xBitmap(*bitmap));
|
| -}
|
| -
|
| -void AppInfoHeaderPanel::ShowAppInWebStore() const {
|
| - DCHECK(CanShowAppInWebStore());
|
| - const GURL url = extensions::ManifestURL::GetDetailsURL(app_);
|
| - DCHECK_NE(url, GURL::EmptyGURL());
|
| - chrome::NavigateParams params(
|
| - profile_,
|
| - net::AppendQueryParameter(url,
|
| - extension_urls::kWebstoreSourceField,
|
| - extension_urls::kLaunchSourceAppListInfoDialog),
|
| - content::PAGE_TRANSITION_LINK);
|
| - chrome::Navigate(¶ms);
|
| -}
|
| -
|
| -bool AppInfoHeaderPanel::CanShowAppInWebStore() const {
|
| - return app_->from_webstore();
|
| -}
|
| -
|
| -void AppInfoHeaderPanel::UninstallApp() {
|
| - DCHECK(CanUninstallApp());
|
| - extension_uninstall_dialog_.reset(
|
| - extensions::ExtensionUninstallDialog::Create(profile_, NULL, this));
|
| - extension_uninstall_dialog_->ConfirmUninstall(app_);
|
| -}
|
| -
|
| -bool AppInfoHeaderPanel::CanUninstallApp() const {
|
| - return extensions::ExtensionSystem::Get(profile_)
|
| - ->management_policy()
|
| - ->UserMayModifySettings(app_, NULL);
|
| -}
|
| -
|
| -void AppInfoHeaderPanel::DisplayLicenses() {
|
| - // Find the first shared module for this app, and display it's options page
|
| - // as an 'about' link.
|
| - // TODO(sashab): Revisit UI layout once shared module usage becomes more
|
| - // common.
|
| - DCHECK(CanDisplayLicenses());
|
| - ExtensionService* service =
|
| - extensions::ExtensionSystem::Get(profile_)->extension_service();
|
| - DCHECK(service);
|
| - const std::vector<extensions::SharedModuleInfo::ImportInfo>& imports =
|
| - extensions::SharedModuleInfo::GetImports(app_);
|
| - const extensions::Extension* imported_module =
|
| - service->GetExtensionById(imports[0].extension_id, true);
|
| - DCHECK(imported_module);
|
| -
|
| - GURL about_page = extensions::ManifestURL::GetOptionsPage(imported_module);
|
| - DCHECK(about_page != GURL::EmptyGURL());
|
| -
|
| - chrome::NavigateParams params(
|
| - profile_, about_page, content::PAGE_TRANSITION_LINK);
|
| - chrome::Navigate(¶ms);
|
| -}
|
| -
|
| -bool AppInfoHeaderPanel::CanDisplayLicenses() {
|
| - if (!extensions::SharedModuleInfo::ImportsModules(app_))
|
| - return false;
|
| -
|
| - ExtensionService* service =
|
| - extensions::ExtensionSystem::Get(profile_)->extension_service();
|
| - DCHECK(service);
|
| -
|
| - const std::vector<extensions::SharedModuleInfo::ImportInfo>& imports =
|
| - extensions::SharedModuleInfo::GetImports(app_);
|
| - const extensions::Extension* imported_module =
|
| - service->GetExtensionById(imports[0].extension_id, true);
|
| - DCHECK(imported_module);
|
| -
|
| - GURL about_page = extensions::ManifestURL::GetOptionsPage(imported_module);
|
| - if (about_page == GURL::EmptyGURL())
|
| - return false;
|
| -
|
| - return true;
|
| -}
|
|
|