Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2588)

Unified Diff: chrome/browser/extensions/external_install_error.cc

Issue 313173003: Revert of Resubmit: Refactor external_install_ui (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/external_install_error.cc
diff --git a/chrome/browser/extensions/external_install_error.cc b/chrome/browser/extensions/external_install_error.cc
deleted file mode 100644
index 795dff31fb7a514ca27fe8a7ccbd3815784d23dc..0000000000000000000000000000000000000000
--- a/chrome/browser/extensions/external_install_error.cc
+++ /dev/null
@@ -1,392 +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/extensions/external_install_error.h"
-
-#include "base/bind.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/app/chrome_command_ids.h"
-#include "chrome/browser/extensions/extension_install_ui.h"
-#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/external_install_manager.h"
-#include "chrome/browser/extensions/webstore_data_fetcher.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/global_error/global_error.h"
-#include "chrome/browser/ui/global_error/global_error_service.h"
-#include "chrome/browser/ui/global_error/global_error_service_factory.h"
-#include "extensions/browser/extension_registry.h"
-#include "extensions/browser/extension_system.h"
-#include "extensions/common/constants.h"
-#include "extensions/common/extension.h"
-#include "grit/generated_resources.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/gfx/image/image.h"
-#include "ui/gfx/image/image_skia_operations.h"
-
-namespace extensions {
-
-namespace {
-
-// Return the menu label for a global error.
-base::string16 GetMenuItemLabel(const Extension* extension) {
- if (!extension)
- return base::string16();
-
- int id = -1;
- if (extension->is_app())
- id = IDS_EXTENSION_EXTERNAL_INSTALL_ALERT_APP;
- else if (extension->is_theme())
- id = IDS_EXTENSION_EXTERNAL_INSTALL_ALERT_THEME;
- else
- id = IDS_EXTENSION_EXTERNAL_INSTALL_ALERT_EXTENSION;
-
- return l10n_util::GetStringFUTF16(id, base::UTF8ToUTF16(extension->name()));
-}
-
-// A global error that spawns a dialog when the menu item is clicked.
-class ExternalInstallMenuAlert : public GlobalError {
- public:
- explicit ExternalInstallMenuAlert(ExternalInstallError* error);
- virtual ~ExternalInstallMenuAlert();
-
- private:
- // GlobalError implementation.
- virtual Severity GetSeverity() OVERRIDE;
- virtual bool HasMenuItem() OVERRIDE;
- virtual int MenuItemCommandID() OVERRIDE;
- virtual base::string16 MenuItemLabel() OVERRIDE;
- virtual void ExecuteMenuItem(Browser* browser) OVERRIDE;
- virtual bool HasBubbleView() OVERRIDE;
- virtual bool HasShownBubbleView() OVERRIDE;
- virtual void ShowBubbleView(Browser* browser) OVERRIDE;
- virtual GlobalErrorBubbleViewBase* GetBubbleView() OVERRIDE;
-
- // The owning ExternalInstallError.
- ExternalInstallError* error_;
-
- DISALLOW_COPY_AND_ASSIGN(ExternalInstallMenuAlert);
-};
-
-// A global error that spawns a bubble when the menu item is clicked.
-class ExternalInstallBubbleAlert : public GlobalErrorWithStandardBubble {
- public:
- explicit ExternalInstallBubbleAlert(ExternalInstallError* error,
- ExtensionInstallPrompt::Prompt* prompt);
- virtual ~ExternalInstallBubbleAlert();
-
- private:
- // GlobalError implementation.
- virtual Severity GetSeverity() OVERRIDE;
- virtual bool HasMenuItem() OVERRIDE;
- virtual int MenuItemCommandID() OVERRIDE;
- virtual base::string16 MenuItemLabel() OVERRIDE;
- virtual void ExecuteMenuItem(Browser* browser) OVERRIDE;
-
- // GlobalErrorWithStandardBubble implementation.
- virtual gfx::Image GetBubbleViewIcon() OVERRIDE;
- virtual base::string16 GetBubbleViewTitle() OVERRIDE;
- virtual std::vector<base::string16> GetBubbleViewMessages() OVERRIDE;
- virtual base::string16 GetBubbleViewAcceptButtonLabel() OVERRIDE;
- virtual base::string16 GetBubbleViewCancelButtonLabel() OVERRIDE;
- virtual void OnBubbleViewDidClose(Browser* browser) OVERRIDE;
- virtual void BubbleViewAcceptButtonPressed(Browser* browser) OVERRIDE;
- virtual void BubbleViewCancelButtonPressed(Browser* browser) OVERRIDE;
-
- // The owning ExternalInstallError.
- ExternalInstallError* error_;
-
- // The Prompt with all information, which we then use to populate the bubble.
- ExtensionInstallPrompt::Prompt* prompt_;
-
- DISALLOW_COPY_AND_ASSIGN(ExternalInstallBubbleAlert);
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// ExternalInstallMenuAlert
-
-ExternalInstallMenuAlert::ExternalInstallMenuAlert(ExternalInstallError* error)
- : error_(error) {
-}
-
-ExternalInstallMenuAlert::~ExternalInstallMenuAlert() {
-}
-
-GlobalError::Severity ExternalInstallMenuAlert::GetSeverity() {
- return SEVERITY_LOW;
-}
-
-bool ExternalInstallMenuAlert::HasMenuItem() {
- return true;
-}
-
-int ExternalInstallMenuAlert::MenuItemCommandID() {
- return IDC_EXTERNAL_EXTENSION_ALERT;
-}
-
-base::string16 ExternalInstallMenuAlert::MenuItemLabel() {
- return GetMenuItemLabel(error_->GetExtension());
-}
-
-void ExternalInstallMenuAlert::ExecuteMenuItem(Browser* browser) {
- error_->ShowDialog();
-}
-
-bool ExternalInstallMenuAlert::HasBubbleView() {
- return false;
-}
-
-bool ExternalInstallMenuAlert::HasShownBubbleView() {
- NOTREACHED();
- return true;
-}
-
-void ExternalInstallMenuAlert::ShowBubbleView(Browser* browser) {
- NOTREACHED();
-}
-
-GlobalErrorBubbleViewBase* ExternalInstallMenuAlert::GetBubbleView() {
- return NULL;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// ExternalInstallBubbleAlert
-
-ExternalInstallBubbleAlert::ExternalInstallBubbleAlert(
- ExternalInstallError* error,
- ExtensionInstallPrompt::Prompt* prompt)
- : error_(error),
- prompt_(prompt) {
- DCHECK(error_);
- DCHECK(prompt_);
-}
-
-ExternalInstallBubbleAlert::~ExternalInstallBubbleAlert() {
-}
-
-GlobalError::Severity ExternalInstallBubbleAlert::GetSeverity() {
- return SEVERITY_LOW;
-}
-
-bool ExternalInstallBubbleAlert::HasMenuItem() {
- return true;
-}
-
-int ExternalInstallBubbleAlert::MenuItemCommandID() {
- return IDC_EXTERNAL_EXTENSION_ALERT;
-}
-
-base::string16 ExternalInstallBubbleAlert::MenuItemLabel() {
- return GetMenuItemLabel(error_->GetExtension());
-}
-
-void ExternalInstallBubbleAlert::ExecuteMenuItem(Browser* browser) {
- ShowBubbleView(browser);
-}
-
-gfx::Image ExternalInstallBubbleAlert::GetBubbleViewIcon() {
- if (prompt_->icon().IsEmpty())
- return GlobalErrorWithStandardBubble::GetBubbleViewIcon();
- // Scale icon to a reasonable size.
- return gfx::Image(gfx::ImageSkiaOperations::CreateResizedImage(
- *prompt_->icon().ToImageSkia(),
- skia::ImageOperations::RESIZE_BEST,
- gfx::Size(extension_misc::EXTENSION_ICON_SMALL,
- extension_misc::EXTENSION_ICON_SMALL)));
-}
-
-base::string16 ExternalInstallBubbleAlert::GetBubbleViewTitle() {
- return prompt_->GetDialogTitle();
-}
-
-std::vector<base::string16>
-ExternalInstallBubbleAlert::GetBubbleViewMessages() {
- std::vector<base::string16> messages;
- messages.push_back(prompt_->GetHeading());
- if (prompt_->GetPermissionCount()) {
- messages.push_back(prompt_->GetPermissionsHeading());
- for (size_t i = 0; i < prompt_->GetPermissionCount(); ++i) {
- messages.push_back(l10n_util::GetStringFUTF16(
- IDS_EXTENSION_PERMISSION_LINE, prompt_->GetPermission(i)));
- }
- }
- // TODO(yoz): OAuth issue advice?
- return messages;
-}
-
-base::string16 ExternalInstallBubbleAlert::GetBubbleViewAcceptButtonLabel() {
- return prompt_->GetAcceptButtonLabel();
-}
-
-base::string16 ExternalInstallBubbleAlert::GetBubbleViewCancelButtonLabel() {
- return prompt_->GetAbortButtonLabel();
-}
-
-void ExternalInstallBubbleAlert::OnBubbleViewDidClose(Browser* browser) {
-}
-
-void ExternalInstallBubbleAlert::BubbleViewAcceptButtonPressed(
- Browser* browser) {
- error_->InstallUIProceed();
-}
-
-void ExternalInstallBubbleAlert::BubbleViewCancelButtonPressed(
- Browser* browser) {
- error_->InstallUIAbort(true);
-}
-
-} // namespace
-
-////////////////////////////////////////////////////////////////////////////////
-// ExternalInstallError
-
-ExternalInstallError::ExternalInstallError(
- content::BrowserContext* browser_context,
- const std::string& extension_id,
- AlertType alert_type,
- ExternalInstallManager* manager)
- : browser_context_(browser_context),
- extension_id_(extension_id),
- alert_type_(alert_type),
- manager_(manager),
- error_service_(GlobalErrorServiceFactory::GetForProfile(
- Profile::FromBrowserContext(browser_context_))),
- browser_(NULL),
- weak_factory_(this) {
-#if !defined(OS_ANDROID)
- browser_ =
- chrome::FindTabbedBrowser(Profile::FromBrowserContext(browser_context_),
- true,
- chrome::GetActiveDesktop());
-#endif
-
- prompt_.reset(new ExtensionInstallPrompt::Prompt(
- ExtensionInstallPrompt::EXTERNAL_INSTALL_PROMPT));
-
- webstore_data_fetcher_.reset(new WebstoreDataFetcher(
- this, browser_context_->GetRequestContext(), GURL(), extension_id_));
- webstore_data_fetcher_->Start();
-}
-
-ExternalInstallError::~ExternalInstallError() {
- if (global_error_.get())
- error_service_->RemoveGlobalError(global_error_.get());
-}
-
-void ExternalInstallError::InstallUIProceed() {
- const Extension* extension = GetExtension();
- if (extension) {
- ExtensionSystem::Get(browser_context_)
- ->extension_service()
- ->GrantPermissionsAndEnableExtension(extension);
- // Since the manager listens for the extension to be loaded, this will
- // remove the error...
- } else {
- // ... Otherwise we have to do it explicitly.
- manager_->RemoveExternalInstallError();
- }
-}
-
-void ExternalInstallError::InstallUIAbort(bool user_initiated) {
- if (user_initiated && GetExtension()) {
- ExtensionSystem::Get(browser_context_)
- ->extension_service()
- ->UninstallExtension(extension_id_,
- false, // Not externally uninstalled.
- NULL); // Ignore error.
- // Since the manager listens for the extension to be removed, this will
- // remove the error...
- } else {
- // ... Otherwise we have to do it explicitly.
- manager_->RemoveExternalInstallError();
- }
-}
-
-void ExternalInstallError::AcknowledgeExtension() {
- const Extension* extension = GetExtension();
- if (extension) {
- ExtensionSystem::Get(browser_context_)
- ->extension_service()
- ->AcknowledgeExternalExtension(extension->id());
- }
-}
-
-void ExternalInstallError::ShowDialog() {
- DCHECK(install_ui_.get());
- DCHECK(prompt_.get());
- DCHECK(show_params_.get());
- ExtensionInstallPrompt::GetDefaultShowDialogCallback().Run(
- *show_params_, this, *prompt_);
-}
-
-const Extension* ExternalInstallError::GetExtension() const {
- return ExtensionRegistry::Get(browser_context_)
- ->GetExtensionById(extension_id_, ExtensionRegistry::EVERYTHING);
-}
-
-void ExternalInstallError::OnWebstoreRequestFailure() {
- OnFetchComplete();
-}
-
-void ExternalInstallError::OnWebstoreResponseParseSuccess(
- scoped_ptr<base::DictionaryValue> webstore_data) {
- std::string localized_user_count;
- double average_rating;
- int rating_count;
- if (!webstore_data->GetString(kUsersKey, &localized_user_count) ||
- !webstore_data->GetDouble(kAverageRatingKey, &average_rating) ||
- !webstore_data->GetInteger(kRatingCountKey, &rating_count)) {
- // If we don't get a valid webstore response, short circuit, and continue
- // to show a prompt without webstore data.
- OnFetchComplete();
- return;
- }
-
- bool show_user_count = true;
- webstore_data->GetBoolean(kShowUserCountKey, &show_user_count);
-
- prompt_->SetWebstoreData(
- localized_user_count, show_user_count, average_rating, rating_count);
- OnFetchComplete();
-}
-
-void ExternalInstallError::OnWebstoreResponseParseFailure(
- const std::string& error) {
- OnFetchComplete();
-}
-
-void ExternalInstallError::OnFetchComplete() {
- install_ui_.reset(
- ExtensionInstallUI::CreateInstallPromptWithBrowser(browser_));
-
- install_ui_->ConfirmExternalInstall(
- this,
- GetExtension(),
- base::Bind(&ExternalInstallError::OnDialogReady,
- weak_factory_.GetWeakPtr()),
- *prompt_);
-}
-
-void ExternalInstallError::OnDialogReady(
- const ExtensionInstallPrompt::ShowParams& show_params,
- ExtensionInstallPrompt::Delegate* prompt_delegate,
- const ExtensionInstallPrompt::Prompt& prompt) {
- DCHECK_EQ(this, prompt_delegate);
- show_params_.reset(new ExtensionInstallPrompt::ShowParams(show_params));
- prompt_.reset(new ExtensionInstallPrompt::Prompt(prompt));
-
- if (alert_type_ == BUBBLE_ALERT) {
- global_error_.reset(new ExternalInstallBubbleAlert(this, prompt_.get()));
- error_service_->AddGlobalError(global_error_.get());
- if (browser_)
- global_error_->ShowBubbleView(browser_);
- } else {
- DCHECK(alert_type_ == MENU_ALERT);
- global_error_.reset(new ExternalInstallMenuAlert(this));
- error_service_->AddGlobalError(global_error_.get());
- }
-}
-
-} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/external_install_error.h ('k') | chrome/browser/extensions/external_install_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698