| Index: chrome/browser/android/banners/app_banner_infobar_delegate_android.cc
|
| diff --git a/chrome/browser/android/banners/app_banner_infobar_delegate_android.cc b/chrome/browser/android/banners/app_banner_infobar_delegate_android.cc
|
| index 643eb4cae2aeb8bd1c44abd0cfe4658aac31f0ad..04b164f664fc31c6ffb272d488f3f07e895041ec 100644
|
| --- a/chrome/browser/android/banners/app_banner_infobar_delegate_android.cc
|
| +++ b/chrome/browser/android/banners/app_banner_infobar_delegate_android.cc
|
| @@ -8,12 +8,13 @@
|
| #include "base/android/jni_string.h"
|
| #include "base/guid.h"
|
| #include "base/location.h"
|
| +#include "base/memory/ptr_util.h"
|
| #include "base/strings/string16.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "chrome/browser/android/shortcut_helper.h"
|
| #include "chrome/browser/android/shortcut_info.h"
|
| #include "chrome/browser/android/tab_android.h"
|
| -#include "chrome/browser/banners/app_banner_data_fetcher.h"
|
| +#include "chrome/browser/banners/app_banner_manager.h"
|
| #include "chrome/browser/banners/app_banner_metrics.h"
|
| #include "chrome/browser/banners/app_banner_settings_helper.h"
|
| #include "chrome/browser/browser_process.h"
|
| @@ -40,38 +41,38 @@ using base::android::ScopedJavaLocalRef;
|
| namespace banners {
|
|
|
| AppBannerInfoBarDelegateAndroid::AppBannerInfoBarDelegateAndroid(
|
| - int event_request_id,
|
| - scoped_refptr<AppBannerDataFetcherAndroid> data_fetcher,
|
| + base::WeakPtr<AppBannerManager> weak_manager,
|
| const base::string16& app_title,
|
| - const GURL& app_icon_url,
|
| - SkBitmap* app_icon,
|
| const GURL& manifest_url,
|
| - const content::Manifest& manifest)
|
| - : data_fetcher_(data_fetcher),
|
| + const content::Manifest& manifest,
|
| + const GURL& icon_url,
|
| + std::unique_ptr<SkBitmap> icon,
|
| + int event_request_id)
|
| + : weak_manager_(weak_manager),
|
| app_title_(app_title),
|
| - app_icon_url_(app_icon_url),
|
| - app_icon_(app_icon),
|
| - event_request_id_(event_request_id),
|
| manifest_url_(manifest_url),
|
| manifest_(manifest),
|
| + icon_url_(icon_url),
|
| + icon_(std::move(icon)),
|
| + event_request_id_(event_request_id),
|
| has_user_interaction_(false) {
|
| DCHECK(!manifest.IsEmpty());
|
| CreateJavaDelegate();
|
| }
|
|
|
| AppBannerInfoBarDelegateAndroid::AppBannerInfoBarDelegateAndroid(
|
| - int event_request_id,
|
| const base::string16& app_title,
|
| - SkBitmap* app_icon,
|
| const base::android::ScopedJavaGlobalRef<jobject>& native_app_data,
|
| + std::unique_ptr<SkBitmap> icon,
|
| const std::string& native_app_package,
|
| - const std::string& referrer)
|
| + const std::string& referrer,
|
| + int event_request_id)
|
| : app_title_(app_title),
|
| - app_icon_(app_icon),
|
| - event_request_id_(event_request_id),
|
| native_app_data_(native_app_data),
|
| + icon_(std::move(icon)),
|
| native_app_package_(native_app_package),
|
| referrer_(referrer),
|
| + event_request_id_(event_request_id),
|
| has_user_interaction_(false) {
|
| DCHECK(!native_app_data_.is_null());
|
| CreateJavaDelegate();
|
| @@ -124,7 +125,7 @@ void AppBannerInfoBarDelegateAndroid::OnInstallIntentReturned(
|
| web_contents->GetURL(),
|
| native_app_package_,
|
| AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
|
| - AppBannerDataFetcher::GetCurrentTime());
|
| + AppBannerManager::GetCurrentTime());
|
|
|
| TrackInstallEvent(INSTALL_EVENT_NATIVE_APP_INSTALL_STARTED);
|
| rappor::SampleDomainAndRegistryFromGURL(g_browser_process->rappor_service(),
|
| @@ -174,7 +175,7 @@ AppBannerInfoBarDelegateAndroid::GetIdentifier() const {
|
| }
|
|
|
| gfx::Image AppBannerInfoBarDelegateAndroid::GetIcon() const {
|
| - return gfx::Image::CreateFrom1xBitmap(*app_icon_.get());
|
| + return gfx::Image::CreateFrom1xBitmap(*icon_.get());
|
| }
|
|
|
| void AppBannerInfoBarDelegateAndroid::InfoBarDismissed() {
|
| @@ -253,19 +254,20 @@ bool AppBannerInfoBarDelegateAndroid::Accept() {
|
| web_contents, manifest_.start_url.spec(),
|
| AppBannerSettingsHelper::WEB);
|
|
|
| - ShortcutInfo info(GURL::EmptyGURL());
|
| - info.UpdateFromManifest(manifest_);
|
| - info.manifest_url = manifest_url_;
|
| - info.icon_url = app_icon_url_;
|
| - info.UpdateSource(ShortcutInfo::SOURCE_APP_BANNER);
|
| -
|
| - const std::string& uid = base::GenerateGUID();
|
| - content::BrowserThread::PostTask(
|
| - content::BrowserThread::IO, FROM_HERE,
|
| - base::Bind(&ShortcutHelper::AddToLauncherInBackgroundWithSkBitmap,
|
| - web_contents->GetBrowserContext(), info, uid,
|
| - *app_icon_.get(),
|
| - data_fetcher_->FetchWebappSplashScreenImageCallback(uid)));
|
| + if (weak_manager_) {
|
| + ShortcutInfo info(GURL::EmptyGURL());
|
| + info.UpdateFromManifest(manifest_);
|
| + info.manifest_url = manifest_url_;
|
| + info.icon_url = icon_url_;
|
| + info.UpdateSource(ShortcutInfo::SOURCE_APP_BANNER);
|
| +
|
| + const std::string& uid = base::GenerateGUID();
|
| + content::BrowserThread::PostTask(
|
| + content::BrowserThread::IO, FROM_HERE,
|
| + base::Bind(&ShortcutHelper::AddToLauncherInBackgroundWithSkBitmap,
|
| + web_contents->GetBrowserContext(), info, uid, *icon_.get(),
|
| + weak_manager_->FetchWebappSplashScreenImageCallback(uid)));
|
| + }
|
|
|
| SendBannerAccepted(web_contents, "web");
|
| return true;
|
|
|