1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/extensions/extension_error_ui_default.h" 6 7#include "base/logging.h" 8#include "chrome/browser/extensions/extension_service.h" 9#include "chrome/browser/ui/browser.h" 10#include "chrome/browser/ui/browser_finder.h" 11#include "chrome/browser/ui/chrome_pages.h" 12#include "chrome/browser/ui/global_error/global_error_bubble_view_base.h" 13 14ExtensionErrorUIDefault::ExtensionErrorUIDefault( 15 ExtensionService* extension_service) 16 : ExtensionErrorUI(extension_service), 17 browser_(NULL), 18 global_error_(new ExtensionGlobalError(this)) { 19} 20 21ExtensionErrorUIDefault::~ExtensionErrorUIDefault() { 22} 23 24bool ExtensionErrorUIDefault::ShowErrorInBubbleView() { 25 Browser* browser = 26 chrome::FindLastActiveWithProfile(extension_service()->profile(), 27 chrome::GetActiveDesktop()); 28 if (!browser) 29 return false; 30 31 browser_ = browser; 32 global_error_->ShowBubbleView(browser); 33 return true; 34} 35 36void ExtensionErrorUIDefault::ShowExtensions() { 37 DCHECK(browser_); 38 chrome::ShowExtensions(browser_, std::string()); 39} 40 41void ExtensionErrorUIDefault::Close() { 42 if (global_error_->HasShownBubbleView()) { 43 // Will end up calling into |global_error_|->OnBubbleViewDidClose, 44 // possibly synchronously. 45 global_error_->GetBubbleView()->CloseBubbleView(); 46 } 47} 48 49ExtensionErrorUIDefault::ExtensionGlobalError::ExtensionGlobalError( 50 ExtensionErrorUIDefault* error_ui) 51 : error_ui_(error_ui) { 52} 53 54bool ExtensionErrorUIDefault::ExtensionGlobalError::HasMenuItem() { 55 return false; 56} 57 58int ExtensionErrorUIDefault::ExtensionGlobalError::MenuItemCommandID() { 59 NOTREACHED(); 60 return 0; 61} 62 63base::string16 ExtensionErrorUIDefault::ExtensionGlobalError::MenuItemLabel() { 64 NOTREACHED(); 65 return NULL; 66} 67 68void ExtensionErrorUIDefault::ExtensionGlobalError::ExecuteMenuItem( 69 Browser* browser) { 70 NOTREACHED(); 71} 72 73base::string16 74ExtensionErrorUIDefault::ExtensionGlobalError::GetBubbleViewTitle() { 75 return error_ui_->GetBubbleViewTitle(); 76} 77 78std::vector<base::string16> 79ExtensionErrorUIDefault::ExtensionGlobalError::GetBubbleViewMessages() { 80 return error_ui_->GetBubbleViewMessages(); 81} 82 83base::string16 ExtensionErrorUIDefault::ExtensionGlobalError:: 84 GetBubbleViewAcceptButtonLabel() { 85 return error_ui_->GetBubbleViewAcceptButtonLabel(); 86} 87 88base::string16 ExtensionErrorUIDefault::ExtensionGlobalError:: 89 GetBubbleViewCancelButtonLabel() { 90 return error_ui_->GetBubbleViewCancelButtonLabel(); 91} 92 93void ExtensionErrorUIDefault::ExtensionGlobalError:: 94 OnBubbleViewDidClose(Browser* browser) { 95 // Calling BubbleViewDidClose on |error_ui_| will delete it. It owns us, so 96 // |this| will be deleted too. 97 error_ui_->BubbleViewDidClose(); 98} 99 100void ExtensionErrorUIDefault::ExtensionGlobalError:: 101 BubbleViewAcceptButtonPressed(Browser* browser) { 102 error_ui_->BubbleViewAcceptButtonPressed(); 103} 104 105void ExtensionErrorUIDefault::ExtensionGlobalError:: 106 BubbleViewCancelButtonPressed(Browser* browser) { 107 error_ui_->BubbleViewCancelButtonPressed(); 108} 109 110// static 111ExtensionErrorUI* ExtensionErrorUI::Create( 112 ExtensionService* extension_service) { 113 return new ExtensionErrorUIDefault(extension_service); 114} 115