// Copyright (c) 2012 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/download/download_request_infobar_delegate_android.h" #include "chrome/browser/infobars/infobar_service.h" #include "chrome/grit/generated_resources.h" #include "components/infobars/core/infobar.h" #include "grit/theme_resources.h" #include "ui/base/l10n/l10n_util.h" DownloadRequestInfoBarDelegateAndroid::FakeCreateCallback* DownloadRequestInfoBarDelegateAndroid::callback_ = NULL; DownloadRequestInfoBarDelegateAndroid:: ~DownloadRequestInfoBarDelegateAndroid() { if (!responded_ && host_) host_->CancelOnce(); } // static void DownloadRequestInfoBarDelegateAndroid::Create( InfoBarService* infobar_service, base::WeakPtr host) { if (DownloadRequestInfoBarDelegateAndroid::callback_ && !DownloadRequestInfoBarDelegateAndroid::callback_->is_null()) { DownloadRequestInfoBarDelegateAndroid::callback_->Run(infobar_service, host); } else if (!infobar_service) { // |web_contents| may not have a InfoBarService if it's actually a // WebContents like those used for extension popups/bubbles and hosted apps // etc. // TODO(benjhayden): If this is an automatic download from an extension, // it would be convenient for the extension author if we send a message to // the extension's DevTools console (as we do for CSP) about how // extensions should use chrome.downloads.download() (requires the // "downloads" permission) to automatically download >1 files. host->Cancel(); } else { infobar_service->AddInfoBar(infobar_service->CreateConfirmInfoBar( scoped_ptr( new DownloadRequestInfoBarDelegateAndroid(host)))); } } // static void DownloadRequestInfoBarDelegateAndroid::SetCallbackForTesting( FakeCreateCallback* callback) { DownloadRequestInfoBarDelegateAndroid::callback_ = callback; } DownloadRequestInfoBarDelegateAndroid::DownloadRequestInfoBarDelegateAndroid( base::WeakPtr host) : ConfirmInfoBarDelegate(), responded_(false), host_(host) {} int DownloadRequestInfoBarDelegateAndroid::GetIconId() const { return IDR_INFOBAR_MULTIPLE_DOWNLOADS; } base::string16 DownloadRequestInfoBarDelegateAndroid::GetMessageText() const { return l10n_util::GetStringUTF16(IDS_MULTI_DOWNLOAD_WARNING); } base::string16 DownloadRequestInfoBarDelegateAndroid::GetButtonLabel( InfoBarButton button) const { return l10n_util::GetStringUTF16((button == BUTTON_OK) ? IDS_MULTI_DOWNLOAD_WARNING_ALLOW : IDS_MULTI_DOWNLOAD_WARNING_BLOCK); } bool DownloadRequestInfoBarDelegateAndroid::Accept() { DCHECK(!responded_); responded_ = true; if (host_) { // This may invalidate |host_|. host_->Accept(); } return !host_; } bool DownloadRequestInfoBarDelegateAndroid::Cancel() { DCHECK(!responded_); responded_ = true; if (host_) { // This may invalidate |host_|. host_->Cancel(); } return !host_; }