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

Unified Diff: chrome/browser/android/webapps/add_to_homescreen_manager.cc

Issue 2290603005: Trigger app banner when add to homescreen is pressed and WebAPKs are enabled. (Closed)
Patch Set: dominickn@ and dfalcantara@'s comments. Created 4 years, 3 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/android/webapps/add_to_homescreen_manager.cc
diff --git a/chrome/browser/android/webapps/add_to_homescreen_manager.cc b/chrome/browser/android/webapps/add_to_homescreen_manager.cc
index 3a12112402710a0d24e4708b9e6d850ddc4df50d..e52e9a3b83af6d2cd8dae85390b1e1369a0e1d01 100644
--- a/chrome/browser/android/webapps/add_to_homescreen_manager.cc
+++ b/chrome/browser/android/webapps/add_to_homescreen_manager.cc
@@ -8,12 +8,16 @@
#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/banners/app_banner_infobar_delegate_android.h"
#include "chrome/browser/android/shortcut_helper.h"
#include "chrome/browser/android/webapk/chrome_webapk_host.h"
#include "chrome/browser/banners/app_banner_settings_helper.h"
+#include "chrome/browser/infobars/infobar_service.h"
#include "chrome/browser/installable/installable_manager.h"
+#include "chrome/browser/ui/android/infobars/app_banner_infobar_android.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/origin_util.h"
@@ -149,13 +153,15 @@ void AddToHomescreenManager::RecordAddToHomescreen() {
void AddToHomescreenManager::OnDidDetermineWebApkCompatibility(
bool is_webapk_compatible) {
- // TODO(pkotwicz): Select whether to use dialog or not based on
- // |is_webapk_compatible|.
- ShowDialog();
+ is_webapk_compatible_ = is_webapk_compatible;
+ if (!is_webapk_compatible)
+ ShowDialog();
}
void AddToHomescreenManager::OnUserTitleAvailable(
const base::string16& user_title) {
+ if (is_webapk_compatible_)
+ return;
JNIEnv* env = base::android::AttachCurrentThread();
ScopedJavaLocalRef<jstring> j_user_title =
base::android::ConvertUTF16ToJavaString(env, user_title);
@@ -166,6 +172,11 @@ void AddToHomescreenManager::OnUserTitleAvailable(
void AddToHomescreenManager::OnDataAvailable(const ShortcutInfo& info,
const SkBitmap& icon) {
+ if (is_webapk_compatible_) {
+ CreateInfoBarForWebAPK(info, icon);
+ return;
+ }
+
JNIEnv* env = base::android::AttachCurrentThread();
ScopedJavaLocalRef<jobject> java_bitmap;
if (icon.getSize())
@@ -177,6 +188,38 @@ void AddToHomescreenManager::OnDataAvailable(const ShortcutInfo& info,
AddShortcut(info, icon);
}
+void AddToHomescreenManager::CreateInfoBarForWebAPK(const ShortcutInfo& info,
+ const SkBitmap& icon) {
+ std::unique_ptr<banners::AppBannerInfoBarDelegateAndroid> delegate_ptr =
+ base::MakeUnique<banners::AppBannerInfoBarDelegateAndroid>(
+ nullptr, info.user_title, info.manifest_url,
+ base::MakeUnique<ShortcutInfo>(info), info.icon_url,
+ base::MakeUnique<SkBitmap>(icon),
+ -1 /* event_request_id */, true);
dominickn 2016/09/02 01:00:58 Minor nit: add /* is_webapk */ after true inside t
Xi Han 2016/09/02 13:58:23 Done.
+
+ std::unique_ptr<infobars::InfoBar> infobar_ptr =
+ base::MakeUnique<AppBannerInfoBarAndroid>(
+ std::move(delegate_ptr), data_fetcher_->shortcut_info().url, true);
+ if (!infobar_ptr.get()) {
+ LOG(ERROR) << "Failed to create infobar to install the WebAPK.";
+ return;
+ }
+
+ content::WebContents* web_contents = data_fetcher_->web_contents();
+ if (!web_contents) {
+ LOG(ERROR) << "Failed to create infobar to install the WebAPK: "
+ << "the associated WebContents is null.";
+ return;
+ }
+
+ banners::AppBannerInfoBarDelegateAndroid* delegate =
dominickn 2016/09/02 01:00:58 Minor nit: move this line below 216 so you fetch t
Xi Han 2016/09/02 13:58:23 You can't get the delegate pointer once the std::m
dominickn 2016/09/02 14:30:48 Acknowledged - I'm blind and didn't see the std::m
+ infobar_ptr.get()->delegate()->AsAppBannerInfoBarDelegateAndroid();
+
+ InfoBarService::FromWebContents(web_contents)->AddInfoBar(
+ std::move(infobar_ptr));
+ delegate->InstallWebApk(web_contents);
+}
+
SkBitmap AddToHomescreenManager::FinalizeLauncherIconInBackground(
const SkBitmap& bitmap,
const GURL& url,

Powered by Google App Engine
This is Rietveld 408576698