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

Side by Side 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: Clean ups 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/android/webapps/add_to_homescreen_manager.h" 5 #include "chrome/browser/android/webapps/add_to_homescreen_manager.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h" 8 #include "base/android/jni_string.h"
9 #include "base/guid.h" 9 #include "base/guid.h"
10 #include "base/location.h" 10 #include "base/location.h"
11 #include "base/memory/ptr_util.h"
11 #include "base/strings/string16.h" 12 #include "base/strings/string16.h"
12 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "chrome/browser/android/banners/app_banner_infobar_delegate_android.h"
13 #include "chrome/browser/android/shortcut_helper.h" 15 #include "chrome/browser/android/shortcut_helper.h"
14 #include "chrome/browser/android/webapk/chrome_webapk_host.h" 16 #include "chrome/browser/android/webapk/chrome_webapk_host.h"
15 #include "chrome/browser/banners/app_banner_settings_helper.h" 17 #include "chrome/browser/banners/app_banner_settings_helper.h"
16 #include "content/public/browser/browser_thread.h" 18 #include "content/public/browser/browser_thread.h"
17 #include "content/public/browser/web_contents.h" 19 #include "content/public/browser/web_contents.h"
18 #include "content/public/common/origin_util.h" 20 #include "content/public/common/origin_util.h"
19 #include "jni/AddToHomescreenManager_jni.h" 21 #include "jni/AddToHomescreenManager_jni.h"
20 #include "ui/gfx/android/java_bitmap.h" 22 #include "ui/gfx/android/java_bitmap.h"
21 23
22 using base::android::JavaParamRef; 24 using base::android::JavaParamRef;
23 using base::android::ScopedJavaLocalRef; 25 using base::android::ScopedJavaLocalRef;
24 26
25 jlong InitializeAndStart(JNIEnv* env, 27 jlong InitializeAndStart(JNIEnv* env,
26 const JavaParamRef<jobject>& obj, 28 const JavaParamRef<jobject>& obj,
27 const JavaParamRef<jobject>& java_web_contents) { 29 const JavaParamRef<jobject>& java_web_contents) {
28 content::WebContents* web_contents = 30 content::WebContents* web_contents =
29 content::WebContents::FromJavaWebContents(java_web_contents); 31 content::WebContents::FromJavaWebContents(java_web_contents);
30 AddToHomescreenManager* manager = new AddToHomescreenManager(env, obj); 32 AddToHomescreenManager* manager = new AddToHomescreenManager(env, obj);
31 manager->Start(web_contents); 33 manager->Start(web_contents);
32 return reinterpret_cast<intptr_t>(manager); 34 return reinterpret_cast<intptr_t>(manager);
33 } 35 }
34 36
35 AddToHomescreenManager::AddToHomescreenManager(JNIEnv* env, jobject obj) 37 AddToHomescreenManager::AddToHomescreenManager(JNIEnv* env, jobject obj)
36 : add_shortcut_pending_(false) { 38 : add_shortcut_pending_(false),
39 is_webapk_compatible_(false) {
37 java_ref_.Reset(env, obj); 40 java_ref_.Reset(env, obj);
38 } 41 }
39 42
40 // static 43 // static
41 bool AddToHomescreenManager::Register(JNIEnv* env) { 44 bool AddToHomescreenManager::Register(JNIEnv* env) {
42 return RegisterNativesImpl(env); 45 return RegisterNativesImpl(env);
43 } 46 }
44 47
45 void AddToHomescreenManager::Destroy(JNIEnv* env, 48 void AddToHomescreenManager::Destroy(JNIEnv* env,
46 const JavaParamRef<jobject>& obj) { 49 const JavaParamRef<jobject>& obj) {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 125
123 AppBannerSettingsHelper::RecordBannerEvent( 126 AppBannerSettingsHelper::RecordBannerEvent(
124 web_contents, web_contents->GetURL(), 127 web_contents, web_contents->GetURL(),
125 data_fetcher_->shortcut_info().url.spec(), 128 data_fetcher_->shortcut_info().url.spec(),
126 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN, 129 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
127 base::Time::Now()); 130 base::Time::Now());
128 } 131 }
129 132
130 void AddToHomescreenManager::OnDidDetermineWebApkCompatibility( 133 void AddToHomescreenManager::OnDidDetermineWebApkCompatibility(
131 bool is_webapk_compatible) { 134 bool is_webapk_compatible) {
132 // TODO(pkotwicz): Select whether to use dialog or not based on 135 is_webapk_compatible_ = is_webapk_compatible;
133 // |is_webapk_compatible|. 136 if (!is_webapk_compatible)
134 ShowDialog(); 137 ShowDialog();
135 } 138 }
136 139
137 void AddToHomescreenManager::OnUserTitleAvailable( 140 void AddToHomescreenManager::OnUserTitleAvailable(
138 const base::string16& user_title) { 141 const base::string16& user_title) {
142 if (is_webapk_compatible_)
143 return;
139 JNIEnv* env = base::android::AttachCurrentThread(); 144 JNIEnv* env = base::android::AttachCurrentThread();
140 ScopedJavaLocalRef<jstring> j_user_title = 145 ScopedJavaLocalRef<jstring> j_user_title =
141 base::android::ConvertUTF16ToJavaString(env, user_title); 146 base::android::ConvertUTF16ToJavaString(env, user_title);
142 Java_AddToHomescreenManager_onUserTitleAvailable(env, 147 Java_AddToHomescreenManager_onUserTitleAvailable(env,
143 java_ref_, 148 java_ref_,
144 j_user_title); 149 j_user_title);
145 } 150 }
146 151
147 void AddToHomescreenManager::OnDataAvailable(const ShortcutInfo& info, 152 void AddToHomescreenManager::OnDataAvailable(const ShortcutInfo& info,
148 const SkBitmap& icon) { 153 const SkBitmap& icon) {
154 if (is_webapk_compatible_) {
155 CreateInfoBarForWebAPK(info, icon);
156 return;
157 }
158
149 JNIEnv* env = base::android::AttachCurrentThread(); 159 JNIEnv* env = base::android::AttachCurrentThread();
150 ScopedJavaLocalRef<jobject> java_bitmap; 160 ScopedJavaLocalRef<jobject> java_bitmap;
151 if (icon.getSize()) 161 if (icon.getSize())
152 java_bitmap = gfx::ConvertToJavaBitmap(&icon); 162 java_bitmap = gfx::ConvertToJavaBitmap(&icon);
153 163
154 Java_AddToHomescreenManager_onReadyToAdd(env, java_ref_, java_bitmap); 164 Java_AddToHomescreenManager_onReadyToAdd(env, java_ref_, java_bitmap);
155 165
156 if (add_shortcut_pending_) 166 if (add_shortcut_pending_)
157 AddShortcut(info, icon); 167 AddShortcut(info, icon);
158 } 168 }
159 169
170 void AddToHomescreenManager::CreateInfoBarForWebAPK(const ShortcutInfo& info,
171 const SkBitmap& icon) {
172 banners::AppBannerInfoBarDelegateAndroid::Create(
173 data_fetcher_->web_contents(), nullptr, info.user_title,
174 base::MakeUnique<ShortcutInfo>(info), base::MakeUnique<SkBitmap>(icon),
175 -1 /* event_request_id */, true /* is_webapk */,
176 true /* start_install_webapk */);
177 }
178
160 SkBitmap AddToHomescreenManager::FinalizeLauncherIconInBackground( 179 SkBitmap AddToHomescreenManager::FinalizeLauncherIconInBackground(
161 const SkBitmap& bitmap, 180 const SkBitmap& bitmap,
162 const GURL& url, 181 const GURL& url,
163 bool* is_generated) { 182 bool* is_generated) {
164 DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread()); 183 DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
165 184
166 return ShortcutHelper::FinalizeLauncherIconInBackground(bitmap, url, 185 return ShortcutHelper::FinalizeLauncherIconInBackground(bitmap, url,
167 is_generated); 186 is_generated);
168 } 187 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698