OLD | NEW |
---|---|
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" |
18 #include "chrome/browser/infobars/infobar_service.h" | |
19 #include "chrome/browser/ui/android/infobars/app_banner_infobar_android.h" | |
16 #include "content/public/browser/browser_thread.h" | 20 #include "content/public/browser/browser_thread.h" |
17 #include "content/public/browser/web_contents.h" | 21 #include "content/public/browser/web_contents.h" |
18 #include "content/public/common/origin_util.h" | 22 #include "content/public/common/origin_util.h" |
19 #include "jni/AddToHomescreenManager_jni.h" | 23 #include "jni/AddToHomescreenManager_jni.h" |
20 #include "ui/gfx/android/java_bitmap.h" | 24 #include "ui/gfx/android/java_bitmap.h" |
21 | 25 |
22 using base::android::JavaParamRef; | 26 using base::android::JavaParamRef; |
23 using base::android::ScopedJavaLocalRef; | 27 using base::android::ScopedJavaLocalRef; |
24 | 28 |
25 jlong InitializeAndStart(JNIEnv* env, | 29 jlong InitializeAndStart(JNIEnv* env, |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
122 | 126 |
123 AppBannerSettingsHelper::RecordBannerEvent( | 127 AppBannerSettingsHelper::RecordBannerEvent( |
124 web_contents, web_contents->GetURL(), | 128 web_contents, web_contents->GetURL(), |
125 data_fetcher_->shortcut_info().url.spec(), | 129 data_fetcher_->shortcut_info().url.spec(), |
126 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN, | 130 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN, |
127 base::Time::Now()); | 131 base::Time::Now()); |
128 } | 132 } |
129 | 133 |
130 void AddToHomescreenManager::OnDidDetermineWebApkCompatibility( | 134 void AddToHomescreenManager::OnDidDetermineWebApkCompatibility( |
131 bool is_webapk_compatible) { | 135 bool is_webapk_compatible) { |
132 // TODO(pkotwicz): Select whether to use dialog or not based on | 136 is_webapk_compatible_ = is_webapk_compatible; |
133 // |is_webapk_compatible|. | 137 if (!is_webapk_compatible) |
134 ShowDialog(); | 138 ShowDialog(); |
135 } | 139 } |
136 | 140 |
137 void AddToHomescreenManager::OnUserTitleAvailable( | 141 void AddToHomescreenManager::OnUserTitleAvailable( |
138 const base::string16& user_title) { | 142 const base::string16& user_title) { |
143 if (is_webapk_compatible_) | |
144 return; | |
139 JNIEnv* env = base::android::AttachCurrentThread(); | 145 JNIEnv* env = base::android::AttachCurrentThread(); |
140 ScopedJavaLocalRef<jstring> j_user_title = | 146 ScopedJavaLocalRef<jstring> j_user_title = |
141 base::android::ConvertUTF16ToJavaString(env, user_title); | 147 base::android::ConvertUTF16ToJavaString(env, user_title); |
142 Java_AddToHomescreenManager_onUserTitleAvailable(env, | 148 Java_AddToHomescreenManager_onUserTitleAvailable(env, |
143 java_ref_, | 149 java_ref_, |
144 j_user_title); | 150 j_user_title); |
145 } | 151 } |
146 | 152 |
147 void AddToHomescreenManager::OnDataAvailable(const ShortcutInfo& info, | 153 void AddToHomescreenManager::OnDataAvailable(const ShortcutInfo& info, |
148 const SkBitmap& icon) { | 154 const SkBitmap& icon) { |
155 if (is_webapk_compatible_) { | |
156 CreateInfoBarForWebAPK(info, icon); | |
157 return; | |
158 } | |
159 | |
149 JNIEnv* env = base::android::AttachCurrentThread(); | 160 JNIEnv* env = base::android::AttachCurrentThread(); |
150 ScopedJavaLocalRef<jobject> java_bitmap; | 161 ScopedJavaLocalRef<jobject> java_bitmap; |
151 if (icon.getSize()) | 162 if (icon.getSize()) |
152 java_bitmap = gfx::ConvertToJavaBitmap(&icon); | 163 java_bitmap = gfx::ConvertToJavaBitmap(&icon); |
153 | 164 |
154 Java_AddToHomescreenManager_onReadyToAdd(env, java_ref_, java_bitmap); | 165 Java_AddToHomescreenManager_onReadyToAdd(env, java_ref_, java_bitmap); |
155 | 166 |
156 if (add_shortcut_pending_) | 167 if (add_shortcut_pending_) |
157 AddShortcut(info, icon); | 168 AddShortcut(info, icon); |
158 } | 169 } |
159 | 170 |
171 void AddToHomescreenManager::CreateInfoBarForWebAPK(const ShortcutInfo& info, | |
172 const SkBitmap& icon) { | |
173 std::unique_ptr<banners::AppBannerInfoBarDelegateAndroid> delegate_ptr = | |
174 base::MakeUnique<banners::AppBannerInfoBarDelegateAndroid>( | |
175 nullptr, info.user_title, base::MakeUnique<ShortcutInfo>(info), | |
176 base::MakeUnique<SkBitmap>(icon), | |
177 -1 /* event_request_id */, true /* is_webapk */); | |
178 | |
179 std::unique_ptr<infobars::InfoBar> infobar_ptr = | |
180 base::MakeUnique<AppBannerInfoBarAndroid>( | |
181 std::move(delegate_ptr), data_fetcher_->shortcut_info().url, true); | |
182 if (!infobar_ptr.get()) { | |
183 LOG(ERROR) << "Failed to create infobar to install the WebAPK."; | |
184 return; | |
185 } | |
186 | |
187 content::WebContents* web_contents = data_fetcher_->web_contents(); | |
188 if (!web_contents) { | |
189 LOG(ERROR) << "Failed to create infobar to install the WebAPK: " | |
190 << "the associated WebContents is null."; | |
191 return; | |
192 } | |
193 | |
194 banners::AppBannerInfoBarDelegateAndroid* delegate = | |
195 infobar_ptr.get()->delegate()->AsAppBannerInfoBarDelegateAndroid(); | |
Peter Kasting
2016/09/06 19:31:23
Don't add this function. You don't need it and we
Xi Han
2016/09/07 15:53:17
Thanks for all the suggestions. I will be more car
| |
196 | |
197 InfoBarService::FromWebContents(web_contents)->AddInfoBar( | |
198 std::move(infobar_ptr)); | |
199 delegate->InstallWebApk(web_contents); | |
200 } | |
201 | |
160 SkBitmap AddToHomescreenManager::FinalizeLauncherIconInBackground( | 202 SkBitmap AddToHomescreenManager::FinalizeLauncherIconInBackground( |
161 const SkBitmap& bitmap, | 203 const SkBitmap& bitmap, |
162 const GURL& url, | 204 const GURL& url, |
163 bool* is_generated) { | 205 bool* is_generated) { |
164 DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread()); | 206 DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread()); |
165 | 207 |
166 return ShortcutHelper::FinalizeLauncherIconInBackground(bitmap, url, | 208 return ShortcutHelper::FinalizeLauncherIconInBackground(bitmap, url, |
167 is_generated); | 209 is_generated); |
168 } | 210 } |
OLD | NEW |